Contrôlez l'accès à l'HTTPAPIsaide des JWT autorisateurs dans Gateway API - APIPasserelle Amazon

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.

Contrôlez l'accès à l'HTTPAPIsaide des JWT autorisateurs dans Gateway API

Vous pouvez utiliser les JSON Web Tokens (JWTs) dans le cadre des frameworks OpenID Connect (OIDC) et OAuth2.0 pour restreindre l'accès des clients à votre. APIs

Si vous configurez un JWT autorisateur pour un itinéraire de votre partAPI, API Gateway valide les demandes JWTs que les clients soumettent. API APILa passerelle autorise ou refuse les demandes en fonction de la validation du jeton et, éventuellement, des étendues du jeton. Si vous configurez des étendues pour un routage, le jeton doit inclure au moins une des étendues du routage.

Vous pouvez configurer des autorisateurs distincts pour chaque itinéraire d'unAPI, ou utiliser le même autorisateur pour plusieurs itinéraires.

Note

Il n'existe aucun mécanisme standard permettant de différencier les jetons d'JWTaccès des autres types de jetonsJWTs, tels que les jetons OpenID Connect ID. À moins que vous n'ayez besoin de jetons d'identification pour API l'autorisation, nous vous recommandons de configurer vos itinéraires pour exiger des étendues d'autorisation. Vous pouvez également configurer vos JWT autorisateurs pour exiger des émetteurs ou des publics que votre fournisseur d'identité utilise uniquement lors de l'émission de jetons d'JWTaccès.

Autoriser les API demandes à l'aide d'un JWT autorisateur

APIGateway utilise le flux de travail général suivant pour autoriser les demandes aux itinéraires configurés pour utiliser un JWT autorisateur.

  1. Vérifiez identitySource pour un jeton. identitySource peut inclure uniquement le jeton, ou le jeton préfixé avec Bearer.

  2. Décodez le jeton.

  3. Vérifiez l'algorithme et la signature du jeton en utilisant la clé publique récupérée auprès du de l'émetteu jwks_uri. Actuellement, seuls les algorithmes RSA basés sont pris en charge. APIGateway 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.

  4. Validez les demandes. APIGateway évalue les demandes de jetons 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ées audience configurées pour le mécanisme d'autorisation. APILa passerelle client_id ne valide que si elle n'audest pas présente. Lorsque aud les deux client_id sont présents, API Gateway évalue. aud

    • exp— Doit être postérieure à l'heure d'arrivée actuelleUTC.

    • nbf— Doit être antérieur à l'heure d'arrivée actuelleUTC.

    • iat— Doit être antérieur à l'heure d'arrivée actuelleUTC.

    • scope ou scp : le jeton doit inclure au moins une des portées dans les authorizationScopes de l'itinéraire.

Si l'une de ces étapes échoue, API Gateway refuse la API demande.

Après avoir validé leJWT, API Gateway transmet les demandes contenues dans le jeton à l'intégration de la API route. Les ressources principales, telles que les fonctions Lambda, peuvent accéder aux JWT réclamations. Par exemple, s'il JWT inclut une demande 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 que API Gateway envoie aux intégrations Lambda, consultez. Création d'intégrations de AWS Lambda proxy pour HTTP APIs dans Gateway API

Création d'un JWT autorisateur

Avant de créer un JWT autorisateur, vous devez enregistrer une application cliente auprès d'un fournisseur d'identité. Vous devez également avoir créé un HTTPAPI. Pour des exemples de création d'un HTTPAPI, voirCréation d'une API HTTP.

Création d'un JWT autorisateur à l'aide de la console

Les étapes suivantes montrent comment créer un JWT autorisateur à l'aide de la console.

Pour créer un JWT autorisateur à l'aide de la console
  1. Connectez-vous à la console API Gateway à l'adresse https://console.aws.amazon.com/apigateway.

  2. Choisissez un HTTPAPI.

  3. Dans le volet de navigation principal, choisissez Authorization.

  4. Choisissez l'onglet Gérer les autorisateurs.

  5. Choisissez Créer.

  6. Pour le type d'autorisateur, choisissez JWT.

  7. Configurez votre JWT autorisateur et spécifiez une source d'identité qui définit la source du jeton.

  8. Choisissez Créer.

Créez un JWT autorisateur à l'aide du AWS CLI

La AWS CLI commande suivante crée un JWT autorisateur. 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é, c'est le IssuerUrl cas. https://cognito-idp.us-east-2.amazonaws.com/userPoolID

aws apigatewayv2 create-authorizer \ --name authorizer-name \ --api-id api-id \ --authorizer-type JWT \ --identity-source '$request.header.Authorization' \ --jwt-configuration Audience=audience,Issuer=IssuerUrl
Créez un JWT autorisateur à l'aide de AWS CloudFormation

Le AWS CloudFormation modèle suivant crée un HTTP API avec un JWT autorisateur qui utilise Amazon Cognito comme fournisseur d'identité.

Le résultat du AWS CloudFormation modèle est destiné à une URL 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 vous HTTP API avec un jeton d'accès dans leURL. Pour appeler le API avec le jeton d'accès, remplacez le # in par a URL ? 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

Mettre à jour un itinéraire pour utiliser un JWT autorisateur

Vous pouvez utiliser la console AWS CLI, le ou un AWS SDK pour mettre à jour un itinéraire afin d'utiliser un JWT autorisateur.

Mettre à jour un itinéraire pour utiliser un JWT autorisateur à l'aide de la console

Les étapes suivantes montrent comment mettre à jour un itinéraire pour utiliser l'JWTautorisateur à l'aide de la console.

Pour créer un JWT autorisateur à l'aide de la console
  1. Connectez-vous à la console API Gateway à l'adresse https://console.aws.amazon.com/apigateway.

  2. Choisissez un HTTPAPI.

  3. Dans le volet de navigation principal, choisissez Authorization.

  4. Choisissez une méthode, puis sélectionnez votre autorisateur dans le menu déroulant, puis choisissez Joindre l'autorisateur.

Mettez à jour un itinéraire pour utiliser un JWT autorisateur à l'aide du AWS CLI

La commande suivante met à jour un itinéraire afin d'utiliser un JWT autorisateur à l'aide du AWS CLI.

aws apigatewayv2 update-route \ --api-id api-id \ --route-id route-id \ --authorization-type JWT \ --authorizer-id authorizer-id \ --authorization-scopes user.email