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.クレーム名