Controlla l'accesso HTTP APIs con gli JWT autorizzatori in API Gateway - Amazon API Gateway

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Controlla l'accesso HTTP APIs con gli JWT autorizzatori in API Gateway

Puoi usare JSON Web Tokens (JWTs) come parte dei framework OpenID OIDC Connect (OAuth) e 2.0 per limitare l'accesso dei client al tuo. APIs

Se configurate un sistema di JWT autorizzazione per un percorso del vostro computerAPI, API Gateway convalida quello JWTs che i client inviano con le richieste. API APIGateway consente o rifiuta le richieste in base alla convalida del token e, facoltativamente, agli ambiti del token. Se si configurano gli ambiti per un percorso, il token deve includere almeno uno degli ambiti del percorso.

È possibile configurare autorizzatori distinti per ogni percorso di un API percorso o utilizzare lo stesso autorizzatore per più percorsi.

Nota

Non esiste un meccanismo standard per differenziare i token di JWT accesso da altri tipi di tokenJWTs, come i token ID OpenID Connect. A meno che non siano necessari token ID per API l'autorizzazione, si consiglia di configurare i percorsi in modo da richiedere gli ambiti di autorizzazione. Puoi anche configurare i tuoi JWT autorizzatori per richiedere gli emittenti o i destinatari che il tuo provider di identità utilizza solo per l'emissione di token di accesso. JWT

Autorizzazione delle richieste con un autorizzatore API JWT

APIGateway utilizza il seguente flusso di lavoro generale per autorizzare le richieste alle route configurate per utilizzare un autorizzatore. JWT

  1. Controllare la presenza di identitySource per un token. Il identitySource può includere solo il token o il token con il prefisso Bearer.

  2. Decodifica del token.

  3. Controlla l'algoritmo e la firma del token utilizzando la chiave pubblica recuperata dal dell'emittent jwks_uri. Attualmente, sono supportati solo algoritmi RSA basati. APIGateway può memorizzare nella cache la chiave pubblica per due ore. Come best practice, quando si esegue la rotazione delle chiavi, definire un periodo di tolleranza durante il quale sia la vecchia che la nuova chiave sono valide.

  4. Convalida delle richieste. APIGateway valuta le seguenti dichiarazioni relative ai token:

    • kid: il token deve presentare una richiesta di intestazione che corrisponde alla chiave nel jwks_uri che ha firmato il token.

    • iss: deve corrispondere all'issuer configurato per l'autorizzazione.

    • aud o client_id: devono corrispondere a una delle voci audience configurate per l'autorizzazione. APIIl gateway viene convalidato client_id solo se non aud è presente. Quando entrambi client_id sono aud presenti, API Gateway valutaaud.

    • exp— Deve essere successiva all'ora corrente di ingresso. UTC

    • nbf— Deve essere antecedente all'ora corrente di ingressoUTC.

    • iat— Deve essere antecedente all'ora corrente di arrivoUTC.

    • scope o scp: il token deve includere almeno uno degli ambiti negli authorizationScopes della route.

Se uno di questi passaggi fallisce, API Gateway nega la API richiesta.

Dopo aver convalidato ilJWT, API Gateway passa le attestazioni contenute nel token all'integrazione del API percorso. Le risorse di backend, come le funzioni Lambda, possono accedere alle JWT attestazioni. Ad esempio, se JWT include un'attestazione di identitàemailID, è disponibile per un'integrazione Lambda in. $event.requestContext.authorizer.jwt.claims.emailID Per ulteriori informazioni sul payload che API Gateway invia alle integrazioni Lambda, consulta. Crea integrazioni AWS Lambda proxy per HTTP APIs in API Gateway

Crea un autorizzatore JWT

Prima di creare un JWT autorizzatore, è necessario registrare un'applicazione client presso un provider di identità. È inoltre necessario aver creato un HTTPAPI. Per esempi di creazione di un HTTPAPI, vediCrea un'API HTTP.

Crea un JWT autorizzatore utilizzando la console

I passaggi seguenti mostrano come creare un JWT autorizzatore utilizzando la console.

Per creare un JWT autorizzatore utilizzando la console
  1. Accedere alla console API Gateway all'indirizzo https://console.aws.amazon.com/apigateway.

  2. Scegli un HTTPAPI.

  3. Nel riquadro di navigazione principale, scegli Autorizzazione.

  4. Scegli la scheda Gestisci gli autorizzatori.

  5. Scegli Crea.

  6. Per Tipo di autorizzazione, scegli. JWT

  7. Configura il tuo JWT autorizzatore e specifica una fonte di identità che definisca l'origine del token.

  8. Scegli Crea.

Crea un JWT autorizzatore utilizzando il AWS CLI

Il AWS CLI comando seguente crea un JWT autorizzatore. Per jwt-configuration, specificare Audience e Issuer per il provider di identità. Se utilizzi Amazon Cognito come provider di identità, lo èIssuerUrl. 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
Crea un JWT autorizzatore utilizzando AWS CloudFormation

Il AWS CloudFormation modello seguente crea un account HTTP API con un JWT autorizzatore che utilizza Amazon Cognito come provider di identità.

L'output del AWS CloudFormation modello è URL per un'interfaccia utente ospitata da Amazon Cognito in cui i clienti possono registrarsi e accedere per ricevere un. JWT Dopo l'accesso, il cliente viene reindirizzato al tuo account HTTP API con un token di accesso nel. URL Per richiamare il API con il token di accesso, modifica il # in in URL ? a per utilizzare il token come parametro della stringa di query.

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

Aggiorna un percorso per utilizzare un JWT autorizzatore

È possibile utilizzare la console AWS CLI, o un AWS SDK per aggiornare un percorso per utilizzare un JWT autorizzatore.

Aggiorna un percorso per utilizzare un JWT autorizzatore utilizzando la console

I passaggi seguenti mostrano come aggiornare un percorso per utilizzare l'JWTautorizzatore utilizzando la console.

Per creare un JWT autorizzatore utilizzando la console
  1. Accedere alla console API Gateway all'indirizzo https://console.aws.amazon.com/apigateway.

  2. Scegli un HTTPAPI.

  3. Nel riquadro di navigazione principale, scegli Autorizzazione.

  4. Scegli un metodo, quindi seleziona l'autorizzatore dal menu a discesa e scegli Allega l'autorizzatore.

Aggiorna un percorso per utilizzare un JWT autorizzatore utilizzando il AWS CLI

Il comando seguente aggiorna una route per utilizzare un JWT autorizzatore utilizzando. 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