Se una sottoscrizione push utilizza l'autenticazione, il servizio Pub/Sub firma un token web JSON (JWT) e lo invia nell'intestazione di autorizzazione della richiesta push. Il JWT include rivendicazioni e una firma.
I sottoscrittori possono convalidare il JWT e verificare quanto segue:
- Le rivendicazioni sono accurate.
- Il servizio Pub/Sub ha firmato le rivendicazioni.
Se i sottoscrittori utilizzano un firewall, non possono ricevere richieste push. Per ricevere richieste push, devi disattivare il firewall e verificare il JWT.
Se un sottoscrittore ha un firewall, potresti ricevere un errore 403 permission denied.
Prima di iniziare
- Scopri di più sugli abbonamenti.
- Comprendi come funzionano le sottoscrizioni push.
- Crea una sottoscrizione push.
Formato JWT
Il JWT è un JWT OpenIDConnect composto da un'intestazione, insieme di rivendicazioni e firma. Il servizio Pub/Sub codifica il JWT come 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 l'insieme di rivendicazioni sono stringhe JSON. Una volta decodificate, assumono il seguente formato:
{"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 allegati alle richieste inviate agli endpoint push potrebbero avere fino a un'ora di validità.
Configurare Pub/Sub per l'autenticazione push
L'esempio seguente mostra come impostare il account di servizio di autenticazione push su
un account di servizio di tua scelta e come concedere il
iam.serviceAccountTokenCreator ruolo al
service-{PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com
service agent.
Console
Vai alla pagina Sottoscrizioni Pub/Sub.
Fai clic su Crea sottoscrizione.
Nel campo ID sottoscrizione, inserisci un nome.
Seleziona un argomento.
Seleziona Push come Tipo di pubblicazione.
Inserisci l'URL di un endpoint.
Seleziona Attiva autenticazione.
Seleziona un account di servizio.
Assicurati che il service agent
service-{PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.comabbia iliam.serviceAccountTokenCreatorruolo nella dashboard IAM del tuo progetto. Se al account di servizio non è stato concesso il ruolo, fai clic su Concedi nella dashboard IAM per farlo.(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 una sottoscrizione push, potresti riscontrare un errore permission denied o not authorized.
Per risolvere il problema, concedi all'entità che avvia la creazione o l'aggiornamento della sottoscrizione l'autorizzazione iam.serviceAccounts.actAs sul account di servizio. Per saperne di più,
consulta Autenticazione in
"Creare sottoscrizioni push."
Se utilizzi una sottoscrizione push autenticata con un'
applicazione App Engine protetta con
Identity-Aware Proxy, devi fornire l'
ID client IAP come segmento di pubblico del token di autenticazione push.
Per attivare IAP nella tua applicazione App Engine, consulta
Attivare IAP.
Per trovare l'ID client IAP, cerca l'ID client IAP-App-Engine-app nella pagina
Credenziali.
Rivendicazioni
Il JWT può essere utilizzato per verificare che le rivendicazioni, incluse le rivendicazioni email e aud, siano firmate da Google. Per saperne di più su come le API OAuth
2.0 di Google possono essere utilizzate sia per l'autenticazione sia per l'autorizzazione, consulta
OpenID Connect.
Esistono due meccanismi che rendono significative queste rivendicazioni. Innanzitutto, Pub/Sub richiede che l'utente o il account di servizio che effettua la chiamata CreateSubscription, UpdateSubscription o ModifyPushConfig abbia un ruolo con l'autorizzazione iam.serviceAccounts.actAs sul service account di autenticazione push. Un esempio di questo ruolo è il
roles/iam.serviceAccountUser
ruolo.
In secondo luogo, l'accesso ai certificati utilizzati per firmare i token è strettamente controllato. Per creare il token, Pub/Sub deve chiamare un servizio Google interno utilizzando un'identità di account di servizio di firma separata, ovvero il service agent service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com.
Questo account di servizio di firma deve disporre dell'autorizzazione iam.serviceAccounts.getOpenIdToken o di un ruolo Creatore di token service account (roles/iam.serviceAccountTokenCreator) sul account di servizio di autenticazione push (o su qualsiasi risorsa predecessore, ad esempio il progetto, del account di servizio di autenticazione push).
Convalidare i token
La convalida dei token inviati da Pub/Sub all'endpoint push prevede:
- Verifica dell'integrità del token utilizzando la convalida della firma.
- Assicurarsi che le rivendicazioni email e segmento di pubblico nel token corrispondano ai valori impostati nella configurazione della sottoscrizione push.
L'esempio seguente illustra come autenticare una richiesta 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 convalidata 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 di C# in Guida rapida all'utilizzo delle librerie client. Per saperne di più, 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 riportati sopra,
consulta Scrivere messaggi Pub/Sub e rispondere a questi messaggi.
Trova altri esempi di come convalidare il JWT del portatore in questa guida per l'accesso con Google per i siti web. Una panoramica più ampia dei token OpenID è disponibile nella Guida a OpenID Connect, inclusa una lista di librerie client che aiutano a convalidare i JWT.
Autenticazione da altri Google Cloud servizi
Le funzioni Cloud Run e App Engine autenticano le chiamate HTTP da Pub/Sub verificando i token generati da Pub/Sub. L'unica configurazione richiesta è la concessione dei ruoli IAM necessari all'account del chiamante.
Consulta le seguenti guide e tutorial per diversi casi d'uso con questi servizi:
Cloud Run
- Attivazione da push Pub/Sub:
il account di servizio di autenticazione push deve avere il
roles/run.invokerruolo ed 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 Run Functions
- Trigger HTTP:
il account di servizio di autenticazione push deve avere il
roles/cloudfunctions.invokerruolo per richiamare una funzione se intendi utilizzare le richieste push Pub/Sub come trigger HTTP per la funzione - Trigger Cloud Pub/Sub Cloud: i ruoli e le autorizzazioni IAM vengono configurati automaticamente se utilizzi i trigger Pub/Sub per richiamare una funzione