Wenn für ein Push-Abo eine Authentifizierung verwendet wird, Der Pub/Sub-Dienst signiert ein JWT und sendet es an Autorisierungsheader der Push-Anfrage. Das JWT enthält Ansprüche und eine Signatur.
Abonnenten können das JWT validieren und Folgendes prüfen:
- Die Ansprüche sind korrekt.
- Der Pub/Sub-Dienst hat die Ansprüche signiert.
Wenn Abonnenten eine Firewall verwenden, können sie keine Push-Anfragen empfangen. Um Push-Anfragen zu erhalten, müssen Sie die Firewall deaktivieren und das JWT prüfen.
Hinweis
- Weitere Informationen zu Abos
- Informationen zur Funktionsweise von Push-Abos
- Erstellen Sie ein Push-Abo.
JWT-Format
Das JWT ist ein OpenIDConnect-JWT, das aus einem Header, Anspruchssatz und Signatur. Der Pub/Sub-Dienst codiert das JWT als Base64-String mit Punkttrennzeichen.
Der folgende Autorisierungsheader enthält beispielsweise ein codiertes JWT:
"Authorization" : "Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdkNjgwZDhjNzBkNDRlOTQ3MTMzY2JkNDk5ZWJjMWE2MWMzZDVh YmMiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJodHRwczovL2V4YW1wbGUuY29tIiwiYXpwIjoiMTEzNzc0M jY0NDYzMDM4MzIxOTY0IiwiZW1haWwiOiJnYWUtZ2NwQGFwcHNwb3QuZ3NlcnZpY2VhY2NvdW50LmNvb SIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJleHAiOjE1NTAxODU5MzUsImlhdCI6MTU1MDE4MjMzNSwia XNzIjoiaHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tIiwic3ViIjoiMTEzNzc0MjY0NDYzMDM4MzIxO TY0In0.QVjyqpmadTyDZmlX2u3jWd1kJ68YkdwsRZDo-QxSPbxjug4ucLBwAs2QePrcgZ6hhkvdc4UHY 4YF3fz9g7XHULNVIzX5xh02qXEH8dK6PgGndIWcZQzjSYfgO-q-R2oo2hNM5HBBsQN4ARtGK_acG-NGG WM3CQfahbEjZPAJe_B8M7HfIu_G5jOLZCw2EUcGo8BvEwGcLWB2WqEgRM0-xt5-UPzoa3-FpSPG7DHk7 z9zRUeq6eB__ldb-2o4RciJmjVwHgnYqn3VvlX9oVKEgXpNFhKuYA-mWh5o7BCwhujSMmFoBOh6mbIXF cyf5UiVqKjpqEbqPGo_AvKvIQ9VTQ"
Der Header und der Anforderungssatz sind JSON-Strings. Nach der Decodierung nehmen sie die folgende Form an:
{"alg":"RS256","kid":"7d680d8c70d44e947133cbd499ebc1a61c3d5abc","typ":"JWT"} { "aud":"https://example.com", "azp":"113774264463038321964", "email":"gae-gcp@appspot.gserviceaccount.com", "sub":"113774264463038321964", "email_verified":true, "exp":1550185935, "iat":1550182335, "iss":"https://accounts.google.com" }
Die an Anfragen angehängten Tokens an Push-Endpunkte können bis zu einer Stunde alt sein.
Pub/Sub für die Push-Authentifizierung konfigurieren
Das folgende Beispiel zeigt, wie das Dienstkonto für die Push-Authentifizierung auf
ein Dienstkonto Ihrer Wahl und wie
Rolle iam.serviceAccountTokenCreator
zu:
service-{PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com
Dienst-Agent.
Console
Rufen Sie die Seite Pub/Sub-Abos auf.
Klicken Sie auf Abo erstellen.
Geben Sie im Feld Abo-ID einen Namen ein.
Wählen Sie ein Thema aus.
Wählen Sie als Zustellungstyp Push aus.
Geben Sie eine Endpunkt-URL ein.
Klicken Sie das Kästchen Authentifizierung aktivieren an.
Wählen Sie ein Dienstkonto aus.
Der Dienst-Agent
service-{PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com
muss im IAM-Dashboard Ihres Projekts die Rolleiam.serviceAccountTokenCreator
haben. Wenn dem Dienstkonto die Rolle noch nicht zugewiesen wurde, klicken Sie im IAM-Dashboard auf Zuweisen.Optional: Geben Sie eine Zielgruppe ein.
Klicken Sie auf Erstellen.
gcloud
# Configure the push subscription gcloud pubsub subscriptions (create|update|modify-push-config) ${SUBSCRIPTION} \ --topic=${TOPIC} \ --push-endpoint=${PUSH_ENDPOINT_URI} \ --push-auth-service-account=${SERVICE_ACCOUNT_EMAIL} \ --push-auth-token-audience=${OPTIONAL_AUDIENCE_OVERRIDE} # Your service agent # `service-{PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com` needs to have the # `iam.serviceAccountTokenCreator` role. PUBSUB_SERVICE_ACCOUNT="service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com" gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member="serviceAccount:${PUBSUB_SERVICE_ACCOUNT}"\ --role='roles/iam.serviceAccountTokenCreator'
Wenn Sie die Authentifizierung für ein Push-Abo aktivieren, kann der Fehler permission denied
oder not authorized
auftreten.
Um dieses Problem zu beheben, weisen Sie dem Hauptkonto, das die Erstellung oder Aktualisierung des Abos initiiert, den
iam.serviceAccounts.actAs
für das Dienstkonto. Weitere Informationen
Siehe Authentifizierung in
„Erstellen Sie Push-Abos.“
Wenn Sie ein authentifiziertes Push-Abo mit einem
App Engine-Anwendung, die mit
Identity-Aware Proxy verfügbar ist, müssen Sie den
IAP-Client-ID als Zielgruppe für das Push-Authentifizierungstoken.
Informationen zum Aktivieren von IAP in Ihrer App Engine-Anwendung finden Sie unter IAP aktivieren.
Die IAP-Client-ID finden Sie auf der Seite Anmeldedaten unter IAP-App-Engine-app
Client-ID.
Ansprüche
Mit dem JWT kann sichergestellt werden, dass die Anforderungen (einschließlich der email
- und aud
-Anforderungen) von Google unterzeichnet werden. Weitere Informationen dazu, wie die OAuth 2.0 APIs von Google sowohl für die Authentifizierung als auch für die Autorisierung verwendet werden können, finden Sie unter OpenID Connect.
Es gibt zwei Mechanismen, mit denen Sie diese Anforderungen nutzbar machen. Erstens:
Pub/Sub erfordert, dass der Nutzer oder das Dienstkonto,
CreateSubscription-, UpdateSubscription- oder ModifyPushConfig-Aufruf, um eine Rolle zu erhalten
mit der Berechtigung iam.serviceAccounts.actAs
für den Push-Authentifizierungsdienst
Konto. Ein Beispiel für eine solche Rolle ist
roles/iam.serviceAccountUser
Rolle.
Zweitens wird der Zugriff auf die zum Signieren der Tokens verwendeten Zertifikate streng kontrolliert. Zum Erstellen des Tokens muss Pub/Sub eine interne
Google-Dienst mit einer separaten Dienstkontoidentität für die Signatur, die
der Dienst-Agent
service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com
Dieses signierende Dienstkonto muss die
Berechtigung iam.serviceAccounts.getOpenIdToken
oder Dienstkontotoken
Rolle „Creator“ (roles/iam.serviceAccountTokenCreator
) für die Push-Authentifizierung
Dienstkonto (oder auf einer Ancestor-Ressource wie dem Projekt des
Push-Auth-Dienstkonto).
Token validieren
Die Validierung von Tokens, die von Pub/Sub an den Push-Endpunkt gesendet werden, umfasst folgende Aufgaben:
- Prüfen der Tokenintegrität mithilfe der Signaturvalidierung.
- Achten Sie darauf, dass die Anforderungen E-Mail und Zielgruppe im Token mit den Werten übereinstimmen, die in der Konfiguration des Push-Abo festgelegt wurden.
Das folgende Beispiel zeigt, wie ein Push authentifiziert wird
-Anfrage an eine App Engine-Anwendung senden, die nicht mit Identity-Aware Proxy gesichert ist. Wenn Ihre App Engine-Anwendung
mit IAP gesichert ist, dem HTTP-Anfrageheader, der die
Das IAP-JWT hat den Wert x-goog-iap-jwt-assertion
und muss entsprechend validiert werden.
Protokoll
Anfrage:
GET https://oauth2.googleapis.com/tokeninfo?id_token={BEARER_TOKEN}
Antwort:
200 OK
{ "alg": "RS256", "aud": "example.com", "azp": "104176025330667568672", "email": "{SERVICE_ACCOUNT_NAME}@{YOUR_PROJECT_NAME}.iam.gserviceaccount.com", "email_verified": "true", "exp": "1555463097", "iat": "1555459497", "iss": "https://accounts.google.com", "kid": "3782d3f0bc89008d9d2c01730f765cfb19d3b70e", "sub": "104176025330667568672", "typ": "JWT" }
C#
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für C# in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu Pub/Sub C# API.
Go
Java
Node.js
Python
Ruby
Informationen zur verwendeten Umgebungsvariable PUBSUB_VERIFICATION_TOKEN
in den obigen Codebeispielen
Siehe Pub/Sub-Nachrichten schreiben und beantworten.
Weitere Beispiele zur Validierung des Inhaber-JWT finden Sie im Handbuch zu Google Log-in für Websites. Eine umfassendere Übersicht über OpenID-Tokens finden Sie im Handbuch zu OpenID Connect. Dort finden Sie auch eine Liste von Clientbibliotheken, mit denen JWTs validiert werden können.
Authentifizierung über andere Google Cloud-Dienste
Cloud Run, App Engine und Cloud Run Functions authentifizieren HTTP-Aufrufe von Pub/Sub, indem von Pub/Sub generierte Tokens verifiziert werden. Sie müssen dem Anruferkonto nur die erforderlichen IAM-Rollen gewähren.
In den folgenden Anleitungen und Tutorials finden Sie Informationen zu verschiedenen Anwendungsfällen mit diesen Diensten:
Cloud Run
- Aus Pub/Sub-Push auslösen:
Ihr Dienstkonto für die Push-Authentifizierung muss die
roles/run.invoker
und an einen Cloud Run-Dienst gebunden sein, um eine entsprechenden Cloud Run-Dienst - Pub/Sub mit Cloud Run verwenden
App Engine
Cloud Run-Funktionen
- HTTP-Trigger:
Ihr Dienstkonto für die Push-Authentifizierung muss die
roles/cloudfunctions.invoker
Rolle zum Aufrufen einer Funktion, wenn Sie Pub/Sub-Push verwenden möchten -Anfragen als HTTP-Trigger an die Funktion - Google Cloud Pub/Sub-Trigger: IAM-Rollen und -Berechtigungen werden automatisch konfiguriert, wenn Sie Pub/Sub-Trigger zum Aufrufen einer Funktion