Se un abbonamento push utilizza l'autenticazione, Il servizio Pub/Sub firma un JWT e lo invia in l'intestazione di autorizzazione della richiesta push. Il JWT include dichiarazioni e un firma.
I sottoscrittori possono convalidare il JWT e verificare quanto segue:
- Le dichiarazioni sono esatte.
- Il servizio Pub/Sub ha firmato le attestazioni.
Se i sottoscrittori usano un firewall, non possono ricevere richieste push. Per ricevere per le richieste push, devi disattivare il firewall e verificare il JWT.
Prima di iniziare
- Scopri di più sugli abbonamenti.
- Informazioni su come funzionano le iscrizioni push.
- Crea una sottoscrizione push.
Formato JWT
Il JWT è un JWT OpenIDConnect costituito da un'intestazione, insieme di reclami e firma. Il servizio Pub/Sub codifica il JWT come una stringa base64 con delimitatori di punti.
Ad esempio, la seguente intestazione di autorizzazione include un JWT codificato:
"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'intestazione e il set di attestazioni sono stringhe JSON. Una volta decodificati, prendono modulo seguente:
{"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" }
I token associati alle richieste inviate agli endpoint push possono risalire fino a un'ora prima.
Configurare Pub/Sub per l'autenticazione push
L'esempio seguente mostra come impostare l'account di servizio push auth su
un account di servizio a tua scelta e come concedere
ruolo iam.serviceAccountTokenCreator
alla
service-{PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com
agente di servizio.
Console
Vai alla pagina Abbonamenti Pub/Sub.
Fai clic su Crea sottoscrizione.
Nel campo ID abbonamento, inserisci un nome.
Seleziona un argomento.
Seleziona Push come Tipo di pubblicazione.
Inserisci un URL endpoint.
Seleziona Attiva autenticazione.
Seleziona un account di servizio.
Assicurati che l'agente di servizio
service-{PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com
haiam.serviceAccountTokenCreator
nel ruolo Dashboard IAM. Se all'account di servizio non è stato concesso il ruolo, fai clic su Concedi. nella dashboard IAM.(Facoltativo) Inserisci un segmento di pubblico.
Fai clic su Crea.
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'
Quando attivi l'autenticazione per un abbonamento push, potresti riscontrare un errore permission denied
o not authorized
.
Per risolvere il problema, assegna all'entità che avvia la creazione o l'aggiornamento dell'abbonamento i
Autorizzazione iam.serviceAccounts.actAs
per l'account di servizio. Per ulteriori informazioni,
consulta Autenticazione nella
"Create push Subscriptions" (Crea sottoscrizioni push).
Se utilizzi una sottoscrizione push autenticata con un
all'applicazione App Engine protetta con
Identity-Aware Proxy, devi fornire
ID client IAP come pubblico del token di autenticazione push.
Per abilitare IAP nell'applicazione App Engine, vedi
Attivazione di IAP.
Per trovare l'ID client IAP, cerca l'ID client IAP-App-Engine-app
nella
pagina Credenziali.
Richieste di indennizzo
Il JWT può essere utilizzato per confermare che le rivendicazioni, tra cui email
e aud
dichiarazioni, vengono firmate da Google. Per ulteriori informazioni su come OAuth di Google
2.0 Le API possono essere utilizzate sia per l'autenticazione che per l'autorizzazione; vedere
OpenID Connect.
Esistono due meccanismi che rendono significative queste dichiarazioni. Per prima cosa,
Pub/Sub richiede che l'account utente o di servizio che esegue
Chiamata CreateSubscription, UpdateSubscription o EditPushConfig per avere un ruolo
con l'autorizzazione iam.serviceAccounts.actAs
sul servizio di autenticazione push
. Un esempio di questo ruolo è
roles/iam.serviceAccountUser
ruolo.
Secondo, l'accesso ai certificati utilizzati per firmare i token è
controllato. Per creare il token, Pub/Sub deve chiamare un
per i servizi Google utilizzando un'identità dell'account di servizio per la firma separata, ovvero
l'agente di servizio
service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com
.
Questo account di servizio per la firma deve avere
Autorizzazione iam.serviceAccounts.getOpenIdToken
o token dell'account di servizio
Ruolo Creator (roles/iam.serviceAccountTokenCreator
) per l'autorizzazione push
account di servizio (o su qualsiasi risorsa predecessore, ad esempio il progetto,
dell'account di servizio push auth).
Convalida dei token
La convalida dei token inviati da Pub/Sub all'endpoint push prevede:
- Controllo dell'integrità del token mediante la convalida della firma.
- Assicurarsi che le attestazioni email e audience nel token corrispondano ai valori. nella configurazione della sottoscrizione push.
L'esempio seguente illustra come autenticare un push
a un'applicazione App Engine non protetta con Identity-Aware Proxy. Se la tua applicazione App Engine
è protetta con IAP, l'intestazione della richiesta HTTP che contiene
Il JWT IAP è x-goog-iap-jwt-assertion
e deve essere convalidato di conseguenza.
protocollo
Richiesta:
GET https://oauth2.googleapis.com/tokeninfo?id_token={BEARER_TOKEN}
Risposta:
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#
Prima di provare questo esempio, segui le istruzioni di configurazione C# in Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API C# Pub/Sub.
Vai
Java
Node.js
Python
Ruby
Per informazioni sulla variabile di ambiente PUBSUB_VERIFICATION_TOKEN
utilizzata
negli esempi di codice precedenti,
consulta Scrittura e risposta a messaggi Pub/Sub.
Puoi trovare altri esempi su come convalidare il JWT di connessione in questo Guida all'accesso con Google per i siti web. Una più ampia una panoramica dei token OpenID è disponibile in Guida di OpenID Connect, incluso un elenco di librerie client che aiutano a convalidare i JWT.
Autenticazione da altri servizi Google Cloud
Cloud Run, App Engine e Cloud Functions autentica le chiamate HTTP da Pub/Sub verificando di token generati da Pub/Sub. L'unica configurazione è concedere i ruoli IAM necessari al chiamante .
Consulta le seguenti guide e tutorial per diversi casi d'uso con queste Google Cloud:
Cloud Run
- Triggering dal push di Pub/Sub:
Il tuo account di servizio di autenticazione push deve avere
roles/run.invoker
e essere associato a un servizio Cloud Run per richiamare un servizio Cloud Run corrispondente - Tutorial sull'utilizzo di Pub/Sub con Cloud Run
App Engine
Cloud Functions
- Trigger HTTP:
Il tuo account di servizio di autenticazione push deve avere
roles/cloudfunctions.invoker
per richiamare una funzione se intendi utilizzare il push di Pub/Sub richieste come trigger HTTP per la funzione - Trigger di Google Cloud Pub/Sub: I ruoli e le autorizzazioni IAM vengono configurati automaticamente se utilizzi Trigger di Pub/Sub per richiamare una funzione