JWT Authorizerとは
-
クライアントが API リクエストとともに送信する JWT を検証するAPI Gatewayの認証機能
- トークンの検証、およびオプションでトークン内のスコープに基づいてリクエストを許可または拒否する
JWT Authorizer 認証の流れ
-
トークン発行者(認可サーバー)によって提供されるJWT形式のトークンを含んだHTTPリクエストが行われる
-
API Gatewayがリクエストを受信し、API Gatewayは検証のためにトークンをJWT Authorizerに渡す
-
identitySourceに指定されたトークンを取得する -
identitySourceにはトークンのみを含めるか、Bearerのプレフィックスが付いたトークンのみを含めることができる
-
-
JWT Authorizerは認可サーバーのJWKSエンドポイント(
jwks_uri) から公開鍵を取得する -
認可サーバーは公開鍵を返却する
-
JWT AuthorizerはJWTトークンを取得した公開鍵を使用して署名を検証し、その後クレームを検証する
-
kid:トークンに署名したjwks_uriのキーと一致すること -
iss: オーソライザーに設定されたissuerと一致すること -
audまたはclient_id: オーソライザーに設定されたaudienceエントリーに含まれること -
exp: 現在時刻(UTC)より後であること -
nbf: 現在時刻(UTC)より前であること -
iat: 現在時刻(UTC)より前であること -
scopeまたはscp: ルートのauthorizationScopesのスコープを少なくとも 1 つ含んでいること
※いずれかの検証手順に失敗した場合、API Gateway は API リクエストを拒否する
-
-
(トークンの検証に成功した場合、)API GatewayはLambdaを実行する
JWT Authorizer設定の大まかな流れ
※API Gateway HTTP API及びそのバックエンドに設定するlambda関数は作成済みであること
- JWT Authorizerを作成する
- Authorizer名、JWTのトークンを取得先、Issuer、Audienceを設定する
- JWT AuthorizerをAPIにアタッチする
JWTトークンのクレームへのアクセス
- JWT トークンのクレームには、Lambda 関数などのバックエンドリソースがアクセスできる
- 例:
$event.requestContext.authorizer.jwt.claims.クレーム名
