Nutzer mit Google ID-Tokens authentifizieren
Auf dieser Seite wird beschrieben, wie die Nutzerauthentifizierung in API Gateway unterstützt wird.
Zum Authentifizieren eines Nutzers muss eine Client-Anwendung eine JSON Web Token (JWT) im Autorisierungsheader des HTTP-Anfrage an Ihre Back-End-API. API-Gateway überprüft das Token im Namen Ihrer API, sodass Sie in der API keinen Code um die Authentifizierung zu verarbeiten. Sie müssen jedoch die API-Konfiguration für Ihr Gateway, um die ausgewählten Authentifizierungsmethoden zu unterstützen.
API Gateway prüft ein JWT effizient mithilfe des JSON Web Key Sets (JWKS) des JWT-Ausstellers. Der Speicherort des JWKS wird im Feld x-google-jwks_uri
der API-Konfiguration des Gateways angegeben. API Gateway speichert die JWKS-Datei fünf Minuten lang im Cache und aktualisiert sie alle fünf Minuten.
Hinweis
- Fügen Sie Ihrer Client-Anwendung Authentifizierungscode hinzu, mit dem sich Nutzer authentifizieren können, indem sie sich mit einem Google-Konto anmelden.
- Wenn Ihre Clientanwendung eine HTTP-Anfrage sendet, muss der Autorisierungs-Header in der Anfrage die folgenden JWT-Anforderungen enthalten:
iss
(issuer)sub
(subject)aud
(audience)iat
(issued at)exp
(expiration time)
API Gateway für die Clientauthentifizierung konfigurieren
Die API-Konfiguration für API Gateway muss ein Objekt für Sicherheitsanforderungen und ein Objekt für Sicherheitsdefinitionen enthalten, damit die Anforderungen im signierten JWT validiert werden können.
So unterstützen Sie die Authentifizierung mithilfe eines Google-ID-Tokens:
Fügen Sie der Sicherheitsdefinition in Ihrer API-Konfiguration Folgendes hinzu, die dem Sicherheitsschema von OpenAPI 2.0 entspricht:
securityDefinitions: google_id_token: authorizationUrl: "" flow: "implicit" type: "oauth2" x-google-issuer: "https://accounts.google.com" x-google-jwks_uri: "https://www.googleapis.com/oauth2/v3/certs" # Optional. Replace YOUR-CLIENT-ID with your client ID x-google-audiences: "YOUR-CLIENT-ID"
Fügen Sie den Abschnitt "security" entweder für die gesamte API auf API-Ebene oder für eine bestimmte Methode auf Methodenebene hinzu.
security: - google_id_token: []
Sie können in der API-Konfiguration mehrere Sicherheitsdefinitionen definieren, aber jede muss einen anderen Aussteller haben. Wenn Sie den Abschnitt "security" sowohl auf der API-Ebene als auch auf der Methodenebene verwenden, werden die Einstellungen auf der API-Ebene durch die Einstellungen auf der Methodenebene überschrieben.
Das Feld x-google-audiences
ist nicht erforderlich. API Gateway akzeptiert alle JWTs mit dem Back-End-Dienstnamen im Format https://SERVICE_NAME
im Anspruch aud
.
Um zusätzlichen Client-IDs den Zugriff auf den Back-End-Dienst zu ermöglichen, können Sie den
zugelassene Client-IDs im Feld x-google-audiences
mithilfe von
kommagetrennte Werte. API Gateway akzeptiert dann die JWTs mit einem der
Angegebene Client-IDs im aud
-Anspruch.
Authentifizierten Aufruf an eine API Gateway API senden
Wenn Sie eine Anfrage mit einem Authentifizierungstoken senden,
empfehlen, das Token in den Authorization:Bearer
-Header einzufügen. Beispiel:
curl --request POST \ --header "Authorization: Bearer ${TOKEN}" \ "${GATEWAY_URL}/echo"
Hier sind GATEWAY_URL
und TOKEN
Umgebungsvariablen, die die bereitgestellte Gateway-URL bzw. das Authentifizierungstoken enthalten. Unter Authentifizierte Anfrage an eine API Gateway API senden finden Sie einen Beispielcode, der eine Anfrage mit dem Header Authorization:Bearer
sendet.
Falls Sie den Header beim Senden der Anfrage nicht verwenden können, können Sie das Authentifizierungstoken in einen Abfrageparameter namens access_token
einfügen.
curl "${GATEWAY_URL}/echo?access_token=${TOKEN}"
Authentifizierte Ergebnisse in Ihrer API empfangen
API Gateway leitet in der Regel alle empfangenen Header weiter. Der ESP überschreibt aber möglicherweise den ursprünglichen Authorization
-Header, wenn die Backend-Adresse in der API-Konfiguration durch x-google-backend
angegeben ist
API Gateway sendet das Authentifizierungsergebnis in X-Apigateway-Api-Userinfo
an die Backend-API. Es wird empfohlen, diesen Header anstelle des ursprünglichen Authorization
-Headers zu verwenden. Dieser Header ist base64url
-codiert und enthält die JWT-Nutzlast.