Nutzer mit Firebase authentifizieren

Auf dieser Seite wird beschrieben, wie die Nutzerauthentifizierung in API Gateway unterstützt wird.

Um einen Nutzer zu authentifizieren, muss eine Clientanwendung im Autorisierungsheader der HTTP-Anfrage ein JSON-Webtoken (JWT) an Ihre Back-End-API senden. API Gateway validiert das Token im Namen Ihrer API, sodass Sie keinen Code in die API einfügen müssen, um die Authentifizierung zu verarbeiten. Sie müssen jedoch die API-Konfiguration für Ihr Gateway so konfigurieren, dass die ausgewählten Authentifizierungsmethoden unterstützt werden.

API Gateway validiert ein JWT leistungsstark mithilfe des JSON Web Key Set (JWKS) des JWT-Ausstellers. Der Speicherort des JWKS wird im Feld x-google-jwks_uri der API-Konfiguration des Gateways angegeben. API Gateway speichert den JWKS fünf Minuten lang im Cache und aktualisiert ihn alle fünf Minuten.

Hinweise

  • Fügen Sie Ihrer Clientanwendung Authentifizierungscode gemäß der Dokumentation zu Firebase Authentication hinzu. Firebase unterstützt die Authentifizierung mithilfe von Passwörtern, Telefonnummern und gängigen föderierten Identitätsanbietern wie Google, Facebook und Twitter.
    • Wenn Ihre Clientanwendung eine HTTP-Anfrage sendet, muss der Autorisierungsheader 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 aktivieren Sie die Firebase-Authentifizierung:

  1. Fügen Sie der Sicherheitsdefinition in Ihrer API-Konfiguration Folgendes hinzu, die dem OpenAPI 2.0-Sicherheitsschema folgt:

     securityDefinitions:
        firebase:
          authorizationUrl: ""
          flow: "implicit"
          type: "oauth2"
          # Replace YOUR-PROJECT-ID with your project ID
          x-google-issuer: "https://securetoken.google.com/YOUR-PROJECT-ID"
          x-google-jwks_uri: "https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com"
          x-google-audiences: "YOUR-PROJECT-ID"
    
  2. 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:
        - firebase: []
    

Sie können in der API-Konfiguration mehrere Sicherheitsdefinitionen festlegen, 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.

Authentifizierten Aufruf an eine API Gateway API senden

Wenn Sie eine Anfrage mit einem Authentifizierungstoken senden, empfehlen wir, 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 stellen finden Sie einen Beispielcode, der eine Anfrage mit dem Header Authorization:Bearer sendet.

Falls Sie den Header nicht verwenden können, wenn Sie die Anfrage senden, können Sie das Authentifizierungstoken in einen Abfrageparameter mit dem Namen access_token einfügen. Beispiel:

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.

Nächste Schritte