Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Vous pouvez utiliser des jetons Web JSON (JWTs) dans le cadre des frameworks OpenID Connect (OIDC)
Si vous configurez un autorisateur JWT pour un itinéraire de votre API, API Gateway valide les demandes d'API soumises par JWTs les clients. API Gateway autorise ou refuse les demandes basées sur la validation de jeton, et éventuellement, les étendues dans le jeton. Si vous configurez des étendues pour un routage, le jeton doit inclure au moins une des étendues du routage.
Vous pouvez configurer des autorisations distinctes pour chaque route d’une API ou utiliser le même mécanisme d’autorisation pour plusieurs routes.
Note
Il n'existe aucun mécanisme standard permettant de différencier les jetons d'accès JWT des autres types de jetons JWTs, tels que les jetons OpenID Connect ID. À moins que vous n’ayez besoin de jetons d’ID pour l’autorisation de l’API, nous vous recommandons de configurer vos routes pour qu’elles requièrent des étendues d’autorisation. Vous pouvez également configurer vos mécanismes d’autorisation JWT pour exiger des émetteurs ou des audiences que votre fournisseur d’identité utilise uniquement lors de l’émission de jetons d’accès JWT.
Autorisation des demandes d’API avec un mécanisme d’autorisation JWT
API Gateway utilise le workflow général suivant pour autoriser les demandes de routes configurées pour utiliser un mécanisme d’autorisation JWT.
-
Vérifiez
identitySource
pour un jeton.identitySource
peut inclure uniquement le jeton, ou le jeton préfixé avecBearer
. -
Décodez le jeton.
-
Vérifiez l’algorithme et la signature du jeton en utilisant la clé publique récupérée auprès du
jwks_uri
de l’émetteur. Actuellement, seuls les algorithmes basés sur RSA sont pris en charge. API Gateway peut mettre en cache la clé publique pendant deux heures. Lorsque vous effectuez la rotation des clés, une bonne pratique consiste à prévoir un délai de grâce pendant lequel les anciennes et les nouvelles clés sont valides. -
Validez les demandes. API Gateway évalue les demandes de jeton suivantes :
-
kid
: le jeton doit avoir une demande d’en-tête qui correspond à la clé du jwks_uri
ayant signé le jeton. -
iss
: doit correspondre à l’ issuer
configuré pour le mécanisme d’autorisation. -
aud
ou client_id
: doit correspondre à l’une des entréesaudience
configurées pour le mécanisme d’autorisation. API Gateway ne valideclient_id
que siaud
n’est pas présent. Siaud
etclient_id
sont présents, API Gateway évalueaud
. -
exp
– doit être postérieure à l’heure actuelle (UTC). -
nbf
– doit être antérieure à l'heure actuelle(UTC). -
iat
– doit être antérieure à l'heure actuelle(UTC). -
scope
ou scp
: le jeton doit inclure au moins une des portées dans lesauthorizationScopes
de la route.
-
Si l’une de ces étapes échoue, API Gateway refuse la demande d’API.
Après avoir validé le JWT, API Gateway transmet les revendications du jeton à l’intégration de la route d’API. Les ressources backend, telles que les fonctions Lambda, peuvent accéder aux revendications JWT. Par exemple, si le JWT inclut une revendication d’identité emailID
, elle est disponible pour une intégration Lambda dans $event.requestContext.authorizer.jwt.claims.emailID
. Pour plus d’informations sur la charge utile qu’API Gateway envoie aux intégrations Lambda, consultez Création d’intégrations de proxy AWS Lambda pour les API HTTP dans API Gateway.
Créer un mécanisme d’autorisation JWT
Avant de créer un mécanisme d’autorisation JWT, vous devez enregistrer une application cliente auprès d’un fournisseur d’identité. Vous devez également avoir créé une API HTTP. Pour obtenir des exemples de création d'une API HTTP, veuillez consulter Création d’une API HTTP.
Création d’un mécanisme d’autorisation JWT à l’aide de la console
La procédure suivante montre comment créer un mécanisme d’autorisation JWT à l’aide de la console.
Pour créer un mécanisme d’autorisation JWT à l’aide de la console
Connectez-vous à la console API Gateway à l'adresse https://console.aws.amazon.com/apigateway.
Choisissez une API HTTP.
Dans le panneau de navigation principal, choisissez Autorisation.
Choisissez l’onglet Gérer les mécanismes d’autorisation.
Sélectionnez Create (Créer).
Pour Type du mécanisme d’autorisation, choisissez JWT.
Configurez votre mécanisme d’autorisation JWT et spécifiez une source d’identité qui définit la source du jeton.
Sélectionnez Create (Créer).
Créez un autorisateur JWT à l'aide du AWS CLI
La commande create-authorizer suivante crée un autorisateur JWT. Pour jwt-configuration
, spécifiez les paramètres Audience
et Issuer
pour votre fournisseur d’identité. Si vous utilisez Amazon Cognito comme fournisseur d’identité, IssuerUrl
est https://cognito-idp.
.us-east-2
.amazonaws.com/userPoolID
aws apigatewayv2 create-authorizer \ --name
authorizer-name
\ --api-idapi-id
\ --authorizer-type JWT \ --identity-source '$request.header.Authorization
' \ --jwt-configuration Audience=audience
,Issuer=IssuerUrl
Créez un autorisateur JWT en utilisant AWS CloudFormation
Le AWS CloudFormation modèle suivant crée une API HTTP avec un autorisateur JWT qui utilise Amazon Cognito comme fournisseur d'identité.
La sortie du AWS CloudFormation modèle est une URL pour une interface utilisateur hébergée par Amazon Cognito où les clients peuvent s'inscrire et se connecter pour recevoir un JWT. Une fois qu’un client s’est connecté, il est redirigé vers votre API HTTP avec un jeton d’accès dans l’URL. Pour invoquer l’API avec le jeton d’accès, remplacez le symbole #
de l’URL par un ?
pour utiliser le jeton comme paramètre de chaîne de requête.
AWSTemplateFormatVersion: '2010-09-09' Description: | Example HTTP API with a JWT authorizer. This template includes an Amazon Cognito user pool as the issuer for the JWT authorizer and an Amazon Cognito app client as the audience for the authorizer. The outputs include a URL for an Amazon Cognito hosted UI where clients can sign up and sign in to receive a JWT. After a client signs in, the client is redirected to your HTTP API with an access token in the URL. To invoke the API with the access token, change the '#' in the URL to a '?' to use the token as a query string parameter. Resources: MyAPI: Type: AWS::ApiGatewayV2::Api Properties: Description: Example HTTP API Name: api-with-auth ProtocolType: HTTP Target: !GetAtt MyLambdaFunction.Arn DefaultRouteOverrides: Type: AWS::ApiGatewayV2::ApiGatewayManagedOverrides Properties: ApiId: !Ref MyAPI Route: AuthorizationType: JWT AuthorizerId: !Ref JWTAuthorizer JWTAuthorizer: Type: AWS::ApiGatewayV2::Authorizer Properties: ApiId: !Ref MyAPI AuthorizerType: JWT IdentitySource: - '$request.querystring.access_token' JwtConfiguration: Audience: - !Ref AppClient Issuer: !Sub https://cognito-idp.${AWS::Region}.amazonaws.com/${UserPool} Name: test-jwt-authorizer MyLambdaFunction: Type: AWS::Lambda::Function Properties: Runtime: nodejs18.x Role: !GetAtt FunctionExecutionRole.Arn Handler: index.handler Code: ZipFile: | exports.handler = async (event) => { const response = { statusCode: 200, body: JSON.stringify('Hello from the ' + event.routeKey + ' route!'), }; return response; }; APIInvokeLambdaPermission: Type: AWS::Lambda::Permission Properties: FunctionName: !Ref MyLambdaFunction Action: lambda:InvokeFunction Principal: apigateway.amazonaws.com SourceArn: !Sub arn:${AWS::Partition}:execute-api:${AWS::Region}:${AWS::AccountId}:${MyAPI}/$default/$default FunctionExecutionRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: - lambda.amazonaws.com Action: - 'sts:AssumeRole' ManagedPolicyArns: - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole UserPool: Type: AWS::Cognito::UserPool Properties: UserPoolName: http-api-user-pool AutoVerifiedAttributes: - email Schema: - Name: name AttributeDataType: String Mutable: true Required: true - Name: email AttributeDataType: String Mutable: false Required: true AppClient: Type: AWS::Cognito::UserPoolClient Properties: AllowedOAuthFlows: - implicit AllowedOAuthScopes: - aws.cognito.signin.user.admin - email - openid - profile AllowedOAuthFlowsUserPoolClient: true ClientName: api-app-client CallbackURLs: - !Sub https://${MyAPI}.execute-api.${AWS::Region}.amazonaws.com ExplicitAuthFlows: - ALLOW_USER_PASSWORD_AUTH - ALLOW_REFRESH_TOKEN_AUTH UserPoolId: !Ref UserPool SupportedIdentityProviders: - COGNITO HostedUI: Type: AWS::Cognito::UserPoolDomain Properties: Domain: !Join - '-' - - !Ref MyAPI - !Ref AppClient UserPoolId: !Ref UserPool Outputs: SignupURL: Value: !Sub https://${HostedUI}.auth.${AWS::Region}.amazoncognito.com/login?client_id=${AppClient}&response_type=token&scope=email+profile&redirect_uri=https://${MyAPI}.execute-api.${AWS::Region}.amazonaws.com
Mise à jour d’une route pour utiliser un mécanisme d’autorisation JWT
Vous pouvez utiliser la console AWS CLI, le ou un AWS SDK pour mettre à jour un itinéraire afin d'utiliser un autorisateur JWT.
Mise à jour d’une route pour utiliser un mécanisme d’autorisation JWT à l’aide de la console
La procédure suivante montre comment mettre à jour un mécanisme d’autorisation JWT à l’aide de la console.
Pour créer un mécanisme d’autorisation JWT à l’aide de la console
Connectez-vous à la console API Gateway à l'adresse https://console.aws.amazon.com/apigateway.
Choisissez une API HTTP.
Dans le panneau de navigation principal, choisissez Autorisation.
-
Choisissez une méthode, puis sélectionnez votre mécanisme d’autorisation dans le menu déroulant, puis choisissez Attacher le mécanisme d’autorisation.
Mettez à jour un itinéraire pour utiliser un autorisateur JWT à l'aide du AWS CLI
La commande update-route suivante met à jour une route pour utiliser un autorisateur JWT :
aws apigatewayv2 update-route \ --api-id
api-id
\ --route-idroute-id
\ --authorization-type JWT \ --authorizer-idauthorizer-id
\ --authorization-scopesuser.email