JWT オーソライザーを使用した HTTP API へのアクセスの制御
OpenID Connect (OIDC)
API のルートに JWT オーソライザーを設定する場合、API Gateway はクライアントが API リクエストとともに送信する JWT を検証します。API Gateway は、トークンの検証、およびオプションでトークン内のスコープに基づいてリクエストを許可または拒否します。ルートのスコープを設定する場合、ルートのスコープを 1 つ以上、トークンに含める必要があります。
API の各ルートに個別のオーソライザーを設定することも、複数のルートに同じオーソライザーを使用することもできます。
JWT アクセストークンを OpenID Connect ID トークンなど他のタイプの JWT と区別する標準的なメカニズムはありません。API 認証に ID トークンが必要でない限り、認可スコープを要求するようにルートを設定することをお勧めします。また、JWT アクセストークンを発行するときにのみ ID プロバイダーが使用する発行者または対象者を要求するように JWT オーソライザーを設定することもできます。
API リクエストの承認
API Gateway は、次の一般的なワークフローを使用して、JWT オーソライザーを使用するように設定されたルートへの要求を承認します。
-
identitySource
でトークンを確認します。identitySource
には、トークンのみを含めるか、Bearer
のプレフィックスが付いたトークンのみを含めることができます。 -
トークンをデコードします。
-
発行者の
jwks_uri
から取得したパブリックキーを使用して、トークンのアルゴリズムと署名を確認します。現在、RSA ベースのアルゴリズムのみがサポートされています。 -
クレームを検証します。API Gateway は、次のトークンクレームを評価します。
これらのいずれかの手順が失敗した場合、API Gateway は API リクエストを拒否します。
API Gateway は JWT を検証した後、トークン内のクレームを API ルートの統合に渡します。JWT クレームには、Lambda 関数などのバックエンドリソースがアクセスできます。例えば、JWT に ID クレーム emailID
が含まれている場合、$event.requestContext.authorizer.jwt.claims.emailID
で Lambda 統合に使用できます。API Gateway が Lambda 統合に送信するペイロードの詳細については、「HTTP API の AWS Lambda プロキシ統合の使用」を参照してください。
JWT オーソライザーを作成する
JWT オーソライザーを作成する前に、クライアントアプリケーションを ID プロバイダーに登録する必要があります。また、HTTP API を作成しておく必要があります。HTTP API の作成例については、「HTTP API の作成」を参照してください。Amazon Cognito を ID プロバイダーとして使用する JWT オーソライザーを使用して HTTP API を作成する AWS CloudFormation テンプレートの例については、「http-with-jwt-auth.yaml
次の AWS CLI コマンドは、JWT オーソライザーを作成します。jwt-configuration
には、ID プロバイダーの Audience
と Issuer
を指定します。
aws apigatewayv2 create-authorizer \ --name
authorizer-name
\ --api-idapi-id
\ --authorizer-type JWT \ --identity-source '$request.header.Authorization
' \ --jwt-configuration Audience=audience
,Issuer=https://cognito-idp.us-east-2
.amazonaws.com/userPoolID
AWS CLI を使用して JWT オーソライザーを使用するようにルートを更新する
次のコマンドは、JWT オーソライザーを使用するようルートを更新します。
aws apigatewayv2 update-route \ --api-id
api-id
\ --route-idroute-id
\ --authorization-type JWT \ --authorizer-idauthorizer-id
\ --authorization-scopesuser.email