L'autenticazione consente a ESP (Extensible Service Proxy) di identificare gli utenti che chiamano i metodi del servizio e, in base a questo, decidere se consentire loro di utilizzare il metodo (autorizzazione). Questa pagina descrive il funzionamento dell'autenticazione con Cloud Endpoints per i servizi gRPC, inclusa la configurazione di ESP in un servizio gRPC per supportare le richieste autenticate e la chiamata di metodi autenticati da un client gRPC.
ESP supporta diversi metodi di autenticazione, tra cui Firebase, Auth0, e token ID Google, e tutti possono essere configurati come parte della configurazione dell'API gRPC. In ogni caso il client deve fornire un token web JSON (JWT) di identificazione richieste. L'ESP convalida il token per conto dell'API, quindi non devi aggiungere alcun codice di autenticazione speciale.
Sebbene sia i requisiti di autenticazione sia quelli delle chiavi API ti consentano di limitare chi può chiamare i metodi del tuo servizio, non offrono lo stesso livello di sicurezza e forniscono informazioni diverse al servizio chiamato. Puoi visualizzare scopri di più sulle differenze tra le chiavi API e l'autenticazione e quando è opportuno utilizzare ogni schema, Quando e perché utilizzare le chiavi API.
Per un esempio pratico completo che utilizza l'autenticazione, consulta Autenticazione con un account di servizio, che aggiunge l'autenticazione al servizio Bookstore dai nostri tutorial.
Configurare l'autenticazione per ESP
Configura l'autenticazione per un servizio Endpoints for gRPC nel relativo
file di configurazione del servizio gRPC
utilizzando la sezione
authentication
. Devi specificare il metodo di autenticazione e i dettagli dell'autenticazione
origine come providers
, dove:
Il valore
id
viene utilizzato per identificare il provider di autenticazione quando viene utilizzato inrules
: typically uses the name of the authentication method, but it doesn't have to.Il valore
issuer
indica l'emittente dei token richiesti e, di conseguenza, specifica il metodo di autenticazione.Il valore
jwks_uri
è l'URI della chiave pubblica del provider, utilizzata per convalidare i token. Alcuni metodi di autenticazione non richiedono questa specifica, ad esempio i token ID di Google, in cui l'ESP ottiene le informazioni automaticamente.jwt_locations
viene utilizzato per definire le località in cui estrarre il JWT.
Puoi definire più fornitori di sicurezza nello stesso file, ma ognuno deve avere un issuer
diverso. Per ulteriori informazioni, consulta
AuthProvider
.
Specifica i metodi dell'API per i quali vuoi utilizzare questi requisiti di autenticazione utilizzando rules
, come descritto in AuthenticationRule
.
Gli esempi seguenti mostrano come configurare ESP in un servizio gRPC per alcuni metodi di autenticazione supportati:
firebase
Per supportare l'autenticazione Firebase:
authentication:
providers:
- id: firebase
jwks_uri: https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com
# Replace FIREBASE-PROJECT-ID with your Firebase project ID
issuer: https://securetoken.google.com/FIREBASE-PROJECT-ID
audiences: "FIREBASE-PROJECT-ID"
# Optional.
jwt_locations:
# expect header "jwt-header-foo": "jwt-prefix-foo<TOKEN>"
- header: "jwt-header-foo"
value_prefix: "jwt-prefix-foo"
- query: "jwt_query_bar"
rules:
- selector: "*"
requirements:
- provider_id: firebase
auth0
Per supportare l'autenticazione Auth0:
authentication:
providers:
- id: auth0_jwk
# Replace YOUR-ACCOUNT-NAME with your service account's email address.
issuer: https://YOUR-ACCOUNT-NAME.auth0.com/
jwks_uri: "https://YOUR-ACCOUNT-NAME.auth0.com/.well-known/jwks.json"
# Optional. Replace YOUR-CLIENT-ID with your client ID
audiences: "YOUR-CLIENT-ID"
rules:
- selector: "*"
requirements:
- provider_id: auth0_jwk
Token ID Google
Per supportare l'autenticazione utilizzando un token ID Google:
authentication:
providers:
- id: google_id_token
# This "issuer" field has to match the field "iss" in the JWT token.
# Sometime it is "accounts.google.com".
issuer: https://accounts.google.com
# Optional. Replace YOUR-CLIENT-ID with your client ID
audiences: "YOUR-CLIENT-ID"
rules:
- selector: "*"
requirements:
- provider_id: google_id_token
personalizzata
Per supportare l'autenticazione personalizzata:
authentication:
providers:
- id: custom_auth_id
# The value below should be unique
issuer: issuer of the token
jwks_uri: url to the public key
# Optional. Replace YOUR-CLIENT-ID with your client ID
audiences: "YOUR-CLIENT-ID"
rules:
- selector: "*"
requirements:
- provider_id: custom_auth_id
Per l'autenticazione Firebase, il campo audiences
è obbligatorio e deve essere il tuo ID progetto Firebase. mentre per tutti gli altri metodi di autenticazione è facoltativo. Se non specificato, l'ESP accetta tutti i JWT con il nome del servizio di backend sotto forma di https://SERVICE_NAME
nel claim aud
. Per consentire ad altri ID client di accedere al servizio di backend, puoi specificare gli ID client consentiti nel campo audiences
utilizzando valori separati da virgole. L'ESP accetta quindi i JWT con gli ID client inseriti nella lista consentita nella rivendicazione aud
.
Chiamare un metodo autenticato da gRPC
Se un metodo richiede l'autenticazione, i client gRPC devono passare
token di autenticazione come
metadati
con la relativa chiamata al metodo, dove la chiave è authorization
e il valore
Bearer <JWT_TOKEN>
. Ecco un esempio di come eseguire questa operazione quando chiami l'esempio di libreria in Python, Node.js o Java:
Python
Java
Node.js
Il modo in cui il client ottiene un JWT valido da inviare dipende dal metodo di autenticazione.
Puoi vedere un esempio completo di utilizzo di un account di servizio Google per generare un token Autenticazione tra i servizi.
Puoi vedere un ulteriore esempio di utilizzo di un file client secret per generare un Token ID Google in questo client di esempio per Cloud Endpoints sull'API App Engine.
Ricezione dei risultati dell'autenticazione nell'API
In genere, l'ESP inoltra tutte le intestazioni che riceve. Tuttavia, sostituisce l'Authorization
originale quando l'indirizzo del backend è specificato da x-google-backend
nella specifica OpenAPI o da BackendRule
nella configurazione del servizio gRPC.
ESP invierà il risultato dell'autenticazione nell'X-Endpoint-API-UserInfo
all'API backend. Ti consigliamo di utilizzare questa intestazione anziché l'intestazione Authorization
originale. Questa intestazione è una stringa codificata da base64url
un oggetto JSON. Il formato degli oggetti JSON è diverso tra ESPv2 ed ESP.
Per ESPv2, l'oggetto JSON è esattamente il payload JWT originale. Per ESP,
l'oggetto JSON utilizza nomi di campo diversi e inserisce il payload JWT originale nel campo claims
.
Per ulteriori informazioni sul formato, consulta Gestire i token JWT nel servizio di backend.