Lambda AuthorizerのCORS対応
2023/06/03
概要
PostリクエストでLambda Authorizerによってリクエストが弾かれた時(Denyポリシーが返された時)、CORSエラーとなった。
原因
Lambda Authorizerでエラーがスローされるか、「拒否」ポリシーが返される場合、接続されているLambda関数は呼ばれない。
その場合にオーソライザーハンドラーには、戻りオブジェクトで使用するヘッダーを設定できない。
解決策として、GatewayResponsesに AWS 応答に対して応答のカスタマイズを指定する。
実装
CDK
lib/construct/api.ts
export class Api extends Construct {
constructor(scope: Construct, id: string, props: ApiProps) {
super(scope, id);
const api = new apigateway.RestApi(this, "api", {
defaultCorsPreflightOptions: {
allowOrigins: apigateway.Cors.ALL_ORIGINS,
allowMethods: apigateway.Cors.ALL_METHODS,
allowHeaders: apigateway.Cors.DEFAULT_HEADERS,
statusCode: 200,
},
})
api.addGatewayResponse('unauthorized-response', {
type: apigateway.ResponseType.UNAUTHORIZED,
statusCode: '401',
responseHeaders: {
'Access-Control-Allow-Origin' : "'*'",
'Access-Control-Allow-Headers': "'*'"
},
});
api.addGatewayResponse('access-denied-response', {
type: apigateway.ResponseType.ACCESS_DENIED,
statusCode: '403',
responseHeaders: {
'Access-Control-Allow-Origin' : "'*'",
'Access-Control-Allow-Headers': "'*'"
},
});
}
}
参考
RECOMMENDED