Si un abonnement push utilise l'authentification, Le service Pub/Sub signe un jeton JWT et l'envoie dans l'en-tête d'autorisation de la requête push. Le jeton JWT inclut des revendications et une signature.
Les abonnés peuvent valider le jeton JWT et vérifier les éléments suivants:
- Les revendications sont exactes.
- Le service Pub/Sub a signé les revendications.
Si les abonnés utilisent un pare-feu, ils ne peuvent pas recevoir de requêtes push. Pour recevoir des requêtes push, vous devez désactiver le pare-feu et vérifier le jeton JWT.
Avant de commencer
- En savoir plus sur les abonnements
- Découvrez le fonctionnement des abonnements push.
- Créez un abonnement push.
Format JWT
Le jeton JWT est un Jeton JWT OpenIDConnect, composé d'un en-tête l'ensemble de revendications et la signature. Le service Pub/Sub encode le jeton JWT Une chaîne en base64 avec des délimiteurs de point.
Par exemple, l'en-tête d'autorisation suivant inclut un jeton JWT encodé :
"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"
L'en-tête et l'ensemble de revendications sont des chaînes JSON. Une fois décodés, ils prennent la forme suivante :
{"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" }
Les jetons associés aux requêtes envoyées aux points de terminaison push peuvent remonter jusqu'à une heure.
Configurer Pub/Sub pour l'authentification push
L'exemple suivant montre comment définir le compte de service d'authentification push
un compte de service de votre choix et comment accorder
le rôle iam.serviceAccountTokenCreator
au
service-{PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com
agent de service.
Console
Accédez à la page Abonnements Pub/Sub.
Cliquez sur Créer un abonnement.
Dans le champ ID d'abonnement, saisissez un nom.
Sélectionnez un sujet.
Sélectionnez Push comme type de diffusion.
Saisissez une URL de point de terminaison.
Cochez Activer l'authentification.
Sélectionnez un compte de service.
Assurez-vous que l'agent de service
service-{PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com
a le le rôleiam.serviceAccountTokenCreator
dans le rôle tableau de bord IAM. Si le compte de service n'a pas reçu le rôle, cliquez sur Attribuer. dans le tableau de bord IAM.Facultatif: saisissez une audience.
Cliquez sur Créer.
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'
Lorsque vous activez l'authentification pour un abonnement push, vous pouvez rencontrer une erreur permission denied
ou not authorized
.
Pour résoudre ce problème, attribuez au compte principal à l'origine de la création ou de la mise à jour de l'abonnement le rôle
Autorisation iam.serviceAccounts.actAs
sur le compte de service. Pour plus d'informations,
consultez la section Authentification
« Créer des abonnements push ».
Si vous utilisez un abonnement push authentifié
une application App Engine sécurisée
Identity-Aware Proxy, vous devez indiquer
ID client IAP en tant qu'audience de jeton d'authentification push.
Pour activer IAP sur votre application App Engine, consultez
Activez IAP.
Pour trouver l'ID client IAP, recherchez l'ID client IAP-App-Engine-app
sur la
Identifiants.
Revendications
Un jeton JWT peut être utilisé pour valider que les revendications (y compris les revendications par email
et aud
) sont signées par Google. Pour plus d'informations sur la manière dont les API OAuth 2.0 de Google peuvent être utilisées à la fois pour l'authentification et l'autorisation, consultez la documentation sur OpenID Connect.
Deux mécanismes rendent ces revendications significatives. Tout d'abord,
Pub/Sub exige que l'utilisateur ou le compte de service
l'appel CreateSubscription, UpdateSubscription ou ModifyPushConfig associé à un rôle.
avec l'autorisation iam.serviceAccounts.actAs
sur le service d'authentification push
Google Cloud. Par exemple, le rôle
roles/iam.serviceAccountUser
rôle de ressource.
Deuxièmement, l'accès aux certificats utilisés pour signer les jetons est étroitement contrôlé. Pour créer le jeton, Pub/Sub doit appeler un service
service Google à l'aide d'une identité de compte de service de signature distincte,
l'agent de service
service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com
Ce compte de service de signature doit disposer du
Autorisation iam.serviceAccounts.getOpenIdToken
ou jeton de compte de service
Rôle de créateur (roles/iam.serviceAccountTokenCreator
) pour l'authentification push
(ou sur toute ressource ascendante, telle que le projet,
compte de service d'authentification push).
Valider les jetons
La validation des jetons envoyés par Pub/Sub au point de terminaison push implique les actions suivantes :
- Vérifier l'intégrité du jeton à l'aide de la validation de signature.
- S'assurer que les revendications email et audience du jeton correspondent aux valeurs définies dans la configuration de l'abonnement push.
L'exemple suivant montre comment authentifier une commande
envoyée à une application App Engine non sécurisée avec Identity-Aware Proxy. Si votre application App Engine
est sécurisée par IAP, l'en-tête de requête HTTP qui contient
Le jeton JWT IAP est x-goog-iap-jwt-assertion
et doit être validé en conséquence.
protocol
Requête :
GET https://oauth2.googleapis.com/tokeninfo?id_token={BEARER_TOKEN}
Réponse :
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#
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage C# qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour C#.
Go
Java
Node.js
Python
Ruby
Pour en savoir plus sur la variable d'environnement PUBSUB_VERIFICATION_TOKEN
utilisée
dans les exemples de code ci-dessus,
consultez la section Écrire des messages Pub/Sub et y répondre.
Vous trouverez d'autres exemples de validation du JWT de support dans ce Guide de connexion à Google pour les sites Web Une présentation plus complète des jetons OpenID est disponible dans le guide OpenID Connect, et comprend une liste de bibliothèques clientes qui utiles pour valider les jetons JWT.
Authentification à partir d'autres services Google Cloud
Cloud Run, App Engine et Cloud Functions authentifie les appels HTTP de Pub/Sub en vérifiant Jetons générés par Pub/Sub. La seule configuration que vous exige d'attribuer les rôles IAM nécessaires à l'appelant Google Cloud.
Consultez les guides et tutoriels ci-dessous pour différents cas d'utilisation avec ces services:
Cloud Run
- Déclenchement à partir du mode push Pub/Sub:
Votre compte de service d'authentification push doit disposer du
roles/run.invoker
et être lié à un service Cloud Run pour appeler service Cloud Run correspondant - Tutoriel : Utiliser Pub/Sub avec Cloud Run
App Engine
Cloud Functions
- Déclencheurs HTTP:
Votre compte de service d'authentification push doit disposer du
roles/cloudfunctions.invoker
pour appeler une fonction si vous avez l'intention d'utiliser le mode push Pub/Sub en tant que déclencheurs HTTP de la fonction - Déclencheurs Google Cloud Pub/Sub: Les rôles et les autorisations IAM sont configurés automatiquement si vous utilisez Déclencheurs Pub/Sub pour appeler une fonction