Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Steuern Sie den Zugriff HTTP APIs mit JWT Autorisierern in Gateway API
Sie können JSON Web Tokens (JWTs) als Teil der OpenID Connect (OIDC)
Wenn Sie einen JWT Autorisierer für eine Route von Ihnen konfigurierenAPI, validiert API Gateway die von den Clients JWTs eingereichten Anfragen. API APIGateway erlaubt oder lehnt Anfragen auf der Grundlage der Token-Validierung und optional der Bereiche im Token ab. Wenn Sie Bereiche für eine Route konfigurieren, muss das Token mindestens einen der Bereiche der Route enthalten.
Sie können unterschiedliche Autorisierer für jede Route einer API Route konfigurieren oder denselben Autorisierer für mehrere Routen verwenden.
Anmerkung
Es gibt keinen Standardmechanismus, um JWT Zugriffstoken von anderen Typen wie OpenID Connect ID-Tokens zu unterscheiden. JWTs Sofern Sie für die API Autorisierung keine ID-Token benötigen, empfehlen wir Ihnen, Ihre Routen so zu konfigurieren, dass Autorisierungsbereiche erforderlich sind. Sie können Ihre JWT Autorisierer auch so konfigurieren, dass Emittenten oder Zielgruppen erforderlich sind, die Ihr Identitätsanbieter nur bei der Ausgabe von Zugriffstoken verwendet. JWT
Autorisieren von Anfragen mit einem Autorisierer API JWT
APIGateway verwendet den folgenden allgemeinen Workflow, um Anfragen an Routen zu autorisieren, die für die Verwendung eines Autorisierers konfiguriert sind. JWT
-
Überprüfen Sie die
identitySource
auf ein Token. DeridentitySource
kann nur das Token oder das Token mit dem PräfixBearer
enthalten. -
Decodieren Sie das Token.
-
Überprüfen Sie den Algorithmus und die Signatur des Tokens mit dem vom des Ausstellers abgerufenen öffentlichen Schlüsse
jwks_uri
. Derzeit werden nur RSA basierte Algorithmen unterstützt. APIGateway kann den öffentlichen Schlüssel zwei Stunden lang zwischenspeichern. Es hat sich bewährt, beim Wechseln von Schlüsseln eine bestimmte Frist einzuräumen, während der sowohl der alte als auch der neue Schlüssel gültig sind. -
Validieren Sie die Ansprüche. APIGateway bewertet die folgenden Token-Ansprüche:
-
kid
– Das Token muss einen Header-Anspruch haben, der mit dem Schlüssel in dem jwks_uri
übereinstimmt, der das Token signiert hat. -
iss
– Muss mit dem für den Genehmiger konfigurierten issuer
übereinstimmen. -
aud
oder client_id
– Muss mit einem der für den Genehmiger konfiguriertenaudience
-Einträge übereinstimmen. APIGateway validiertclient_id
nur, wennaud
es nicht vorhanden ist. Wennaud
sowohl als auch vorhandenclient_id
sind, führt API Gateway eine Auswertungaud
durch. -
exp
— Muss nach der aktuellen Uhrzeit in UTC sein. -
nbf
— Muss vor der aktuellen Uhrzeit seinUTC. -
iat
— Muss vor der aktuellen Uhrzeit seinUTC. -
scope
oder scp
– Das Token muss mindestens einen der Bereiche in denauthorizationScopes
der Route enthalten.
-
Schlägt einer dieser Schritte fehl, API lehnt Gateway die API Anfrage ab.
Nach der JWT Validierung von leitet API Gateway die Ansprüche im Token an die Integration der API Route weiter. Backend-Ressourcen wie Lambda-Funktionen können auf die JWT Ansprüche zugreifen. Wenn der beispielsweise einen Identitätsanspruch JWT beinhaltetemailID
, ist er für eine Lambda-Integration in $event.requestContext.authorizer.jwt.claims.emailID
verfügbar. Weitere Informationen zu den Payloads, die API Gateway an Lambda-Integrationen sendet, finden Sie unter. Erstellen Sie AWS Lambda Proxy-Integrationen für HTTP APIs in Gateway API
Erstellen Sie einen Autorisierer JWT
Bevor Sie einen JWT Autorisierer erstellen, müssen Sie eine Client-Anwendung bei einem Identitätsanbieter registrieren. Sie müssen auch eine HTTP API erstellt haben. Beispiele für die Erstellung eines HTTP API finden Sie unterErstellen Sie eine HTTP-API.
Erstellen Sie mithilfe der JWT Konsole einen Autorisierer
Die folgenden Schritte zeigen, wie Sie mithilfe der Konsole einen JWT Autorisierer erstellen.
Um einen JWT Autorisierer mit der Konsole zu erstellen
Melden Sie sich unter https://console.aws.amazon.com/apigateway
bei der API Gateway-Konsole an. Wählen Sie eine HTTPAPI.
Wählen Sie im Hauptnavigationsbereich die Option Autorisierung aus.
Wählen Sie die Registerkarte Autorisatoren verwalten.
Wählen Sie Erstellen.
Wählen Sie als Autorisierungstyp die Option. JWT
Konfigurieren Sie Ihren JWT Autorisierer und geben Sie eine Identitätsquelle an, die die Quelle des Tokens definiert.
Wählen Sie Erstellen.
Erstellen Sie einen JWT Autorisierer mit dem AWS CLI
Der folgende AWS CLI Befehl erstellt einen JWT Autorisierer. Bei jwt-configuration
geben Sie das Audience
und Issuer
als Ihren Identitätsanbieter an. Wenn Sie Amazon Cognito als Identitätsanbieter verwenden, IssuerUrl
ist https://cognito-idp.
dies der Fall.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
Erstellen Sie einen JWT Autorisierer mit AWS CloudFormation
Die folgende AWS CloudFormation Vorlage erstellt eine HTTP API mit einem JWT Autorisierer, der Amazon Cognito als Identitätsanbieter verwendet.
Die Ausgabe der AWS CloudFormation Vorlage ist eine URL für eine von Amazon Cognito gehostete Benutzeroberfläche, auf der sich Kunden registrieren und anmelden können, um eine JWT zu erhalten. Nachdem sich ein Kunde angemeldet hat, wird der Client HTTP API mit einem Zugriffstoken im URL zu Ihnen weitergeleitet. Um den API mit dem Zugriffstoken aufzurufen, ändern Sie den #
URL in in a, ?
um das Token als Abfragezeichenfolgenparameter zu verwenden.
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
Aktualisieren Sie eine Route, um einen JWT Autorisierer zu verwenden
Sie können die Konsole, den oder an verwenden AWS CLI, AWS SDK um eine Route so zu aktualisieren, dass sie einen JWT Autorisierer verwendet.
Aktualisieren Sie eine Route mithilfe der Konsole, um einen JWT Autorisierer zu verwenden
Die folgenden Schritte zeigen, wie Sie eine Route aktualisieren, um den JWT Authorizer mithilfe der Konsole zu verwenden.
Um einen JWT Authorizer mit der Konsole zu erstellen
Melden Sie sich unter https://console.aws.amazon.com/apigateway
bei der API Gateway-Konsole an. Wählen Sie eine HTTPAPI.
Wählen Sie im Hauptnavigationsbereich die Option Autorisierung aus.
-
Wählen Sie eine Methode aus, wählen Sie dann Ihren Autorisierer aus dem Drop-down-Menü aus und wählen Sie Autorisierer anhängen aus.
Aktualisieren Sie eine Route, um einen JWT Autorisierer zu verwenden, indem Sie AWS CLI
Der folgende Befehl aktualisiert eine Route zur Verwendung eines JWT Autorisierers mithilfe von. AWS CLI
aws apigatewayv2 update-route \ --api-id
api-id
\ --route-idroute-id
\ --authorization-type JWT \ --authorizer-idauthorizer-id
\ --authorization-scopesuser.email