Auf dieser Seite wird gezeigt, wie Sie die Nutzerauthentifizierung in Cloud Endpoints unterstützen.
Zur Authentifizierung eines Nutzers muss eine Clientanwendung ein JSON-Webtoken (JWT) im Autorisierungs-Header der HTTP-Anfrage an Ihre Back-End-API senden. Der Extensible Service Proxy (ESP) validiert das Token für Ihre API, sodass Sie der API keinen Code zur Verarbeitung der Authentifizierung hinzufügen müssen. Sie müssen Ihr OpenAPI-Dokument jedoch so konfigurieren, dass es die ausgewählten Authentifizierungsmethoden unterstützt.
Der ESP prüft ein JSON-Webtoken (JWT) effizient mithilfe der öffentlichen Schlüssel des JWT-Ausstellers. Dabei speichert der ESP die öffentlichen Schlüssel 5 Minuten lang im Cache. Darüber hinaus speichert der ESP validierte JWTs 5 Minuten lang oder bis zum Ablauf des JWT, je nachdem, was zuerst eintritt.
Hinweis
- Fügen Sie Ihrer Clientanwendung den Authentifizierungscode gemäß der Auth0-Dokumentation hinzu.
- 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)
ESP für die Clientauthentifizierung konfigurieren
Das OpenAPI-Dokument muss ein Objekt für Sicherheitsanforderungen und ein Objekt für Sicherheitsdefinitionen enthalten, damit der ESP die Anforderungen im signierten JWT validieren kann.
So aktivieren Sie die Auth0-Authentifizierung:
OpenAPI 2.0
- Fügen Sie Ihrer OpenAPI-Spezifikation Folgendes hinzu:
securityDefinitions: auth0_jwk: authorizationUrl: "" flow: "implicit" type: "oauth2" # Replace ACCOUNT_NAME with your Auth0 account name. x-google-issuer: "https://ACCOUNT_NAME.auth0.com/" x-google-jwks_uri: "https://ACCOUNT_NAME.auth0.com/.well-known/jwks.json" # Optional. Replace CLIENT_ID with your client ID x-google-audiences: "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: - auth0_jwk: []
OpenAPI 3.x
- Fügen Sie Ihrer OpenAPI-Spezifikation Folgendes hinzu:
components: securitySchemes: auth0_jwk: type: oauth2 flows: implicit: authorizationUrl: "" scopes: {} x-google-auth: # Replace ACCOUNT_NAME with your Auth0 account name. issuer: https://ACCOUNT_NAME.auth0.com/ jwksUri: https://ACCOUNT_NAME.auth0.com/.well-known/jwks.json # Optional. Replace CLIENT_ID with your client ID(s) as a list of strings audiences: - 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: - auth0_jwk: []
Sie können mehrere Sicherheitsdefinitionen im OpenAPI-Dokument angeben, allerdings muss jede Definition 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 oder audiences ist nicht erforderlich. ESP akzeptiert alle JWTs mit dem Back-End-Dienstnamen im Format https://SERVICE_NAME im Anspruch aud. Damit zusätzliche Client-IDs auf den Back-End-Dienst zugreifen können, können Sie die zulässigen Client-IDs im Feld x-google-audiences oder audiences durch kommagetrennte Werte angeben. Der ESP akzeptiert dann die JWTs mit einer der angegebenen Client-IDs im Anspruch aud.
Sie können auch JWT-Standorte anpassen, indem Sie x-google-Erweiterungen hinzufügen. Weitere Informationen finden Sie unter OpenAPI 2.0-Erweiterungen
oder OpenAPI 3.x-Erweiterungen.
Authentifizierter Aufruf an eine Endpoints API
Wenn Sie eine Anfrage mit einem Authentifizierungstoken senden, empfehlen wir aus Sicherheitsgründen, das Token in den Header Authorization:Bearer einzufügen. Beispiel:
curl -H "Authorization: Bearer <var>TOKEN</var>" "<var>ENDPOINTS_HOST</var>/echo"
Ersetzen Sie die Variablen ENDPOINTS_HOST und TOKEN durch den Hostnamen Ihrer API bzw. das Authentifizierungstoken. Unter Authentifizierte Anfrage an eine Endpoints 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 "<var>ENDPOINTS_HOST</var>/echo?access_token=<var>TOKEN</var>"
Authentifizierte Ergebnisse in Ihrer API empfangen
Der ESP leitet in der Regel alle empfangenen Header weiter. Der ESP überschreibt aber möglicherweise den ursprünglichen Authorization-Header, wenn die Back-End-Adresse in der OpenAPI-Spezifikation durch x-google-backend oder in der gRPC-Dienstkonfiguration mit BackendRule angegeben wird.
Der ESP sendet das Authentifizierungsergebnis in X-Endpoint-API-UserInfo an die Back-End-API. Wir empfehlen, diesen Header anstelle des ursprünglichen Authorization-Headers zu verwenden. Dieser Header ist ein String, in den base64url ein JSON-Objekt codiert. Das JSON-Objektformat unterscheidet sich zwischen ESPv2 und ESP.
Bei ESPv2 ist das JSON-Objekt genau die ursprüngliche JWT-Nutzlast. Für ESP verwendet das JSON-Objekt andere Feldnamen und die ursprüngliche JWT-Nutzlast wird im Feld claims platziert.
Weitere Informationen zum Format finden Sie unter JWTs im Back-End-Dienst verarbeiten.
Beispiele
Nächste Schritte