Questa pagina descrive come aggiungere il supporto nell'API per l'autenticazione utente dalle applicazioni client utilizzando Cloud Endpoints Frameworks. Tieni presente che i client Android e JavaScript sono attualmente supportati.
Endpoints Frameworks supporta l'autenticazione degli utenti da applicazioni client che utilizzano una qualsiasi delle seguenti metodologie:
Indipendentemente dal metodo di autenticazione utilizzato, in ogni metodo API in cui vuoi verificare l'autenticazione corretta, devi verificare la presenza di un User
valido, come descritto nelle seguenti sezioni:
Prerequisiti
Questa pagina presuppone che tu abbia già:
È stato creato un progetto Google Cloud.
Autenticazione con Firebase Auth
Per supportare le chiamate dai clienti che utilizzano Firebase Auth:
Se non l'hai ancora fatto, crea un progetto Firebase. I progetti Firebase sono progetti della console Google Cloud che utilizzano i servizi Firebase. Per ulteriori informazioni, consulta Che cos'è un progetto Firebase? e la documentazione di Firebase.
Aggiungi quanto segue all'annotazione
@Api
o del metodo:- Aggiungi un parametro
authenticators
all'annotazione, impostato sul valore{EspAuthenticator.class}
. - Aggiungi un parametro
issuers
contenente un set@ApiIssuer
su Firebase. - Aggiungi un parametro
issuerAudiences
contenente un set@ApiIssuerAudience
su Firebase e il tuo ID progetto.
Ad esempio:
@Api( name = "YOUR_API_NAME", version = "VERSION_NUMBER", authenticators = {EspAuthenticator.class}, issuers = { @ApiIssuer( name = "firebase", issuer = "https://securetoken.google.com/YOUR_PROJECT_ID", jwksUri = "https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com") }, issuerAudiences = { @ApiIssuerAudience(name = "firebase", audiences = "YOUR_PROJECT_ID") })
- Sostituisci
YOUR_API_NAME
con il nome della tua API. - Sostituisci
VERSION_NUMBER
con la versione dell'API, ad esempiov1
. - Sostituisci entrambe le istanze di
YOUR_PROJECT_ID
con l'ID progetto Firebase.
- Aggiungi un parametro
Nel codice di implementazione dell'API, importa
Users
:import com.google.api.server.spi.auth.common.User;
In ogni metodo API in cui vuoi verificare l'autenticazione corretta, verifica la presenza di un
User
valido e, se non è presente, genera un'eccezione, come mostrato nella definizione del metodo di esempio:@ApiMethod(httpMethod = ApiMethod.HttpMethod.GET) public Email getUserEmail(User user) throws UnauthorizedException { if (user == null) { throw new UnauthorizedException("Invalid credentials"); } Email response = new Email(); response.setEmail(user.getEmail()); return response; }
Esegui di nuovo il deployment dell'API ogni volta che aggiungi nuovi client.
Aggiunta dell'autenticazione Firebase a un client
Puoi aggiungere l'autenticazione Firebase al tuo codice come descritto nella documentazione di Firebase. Al client deve essere associato un progetto Google Cloud e l'ID progetto deve essere elencato nella configurazione dell'emittente Firebase dell'API, come mostrato nella sezione precedente.
Autenticazione con Auth0
Per supportare le chiamate da client che utilizzano Auth0:
Aggiungi quanto segue all'annotazione
@Api
o del metodo:- Aggiungi un parametro
authenticators
all'annotazione, impostato sul valore{EspAuthenticator.class}
. - Aggiungi un parametro
issuers
contenente un parametro@ApiIssuer
impostato su Auth0. - Aggiungi un parametro
issuerAudiences
contenente un@ApiIssuerAudience
impostato su Auth0 e il tuo ID client Auth0.
Ad esempio:
@Api( name = "YOUR_API_NAME", version = "VERSION_NUMBER", authenticators = {EspAuthenticator.class}, issuers = { @ApiIssuer( name = "auth0", issuer = "https://YOUR_ACCOUNT_NAME.auth0.com/", jwksUri = "https://YOUR_ACCOUNT_NAME.auth0.com/.well-known/jwks.json") }, issuerAudiences = { @ApiIssuerAudience(name = "auth0", audiences = "AUTH0_CLIENT_ID") })
- Sostituisci
YOUR_API_NAME
con il nome della tua API. - Sostituisci
VERSION_NUMBER
con la versione dell'API, ad esempiov1
. - Sostituisci
YOUR_ACCOUNT_NAME
con il nome dell'account Auth0 utilizzato per il client. - Sostituisci
AUTH0_CLIENT_ID
con l'ID che vuoi utilizzare per il client.
- Aggiungi un parametro
Nel codice di implementazione dell'API, importa
Users
:import com.google.api.server.spi.auth.common.User;
In ogni metodo API in cui vuoi verificare l'autenticazione corretta, verifica la presenza di un
User
valido e, se non è presente, genera un'eccezione, come mostrato nella definizione del metodo di esempio:@ApiMethod(httpMethod = ApiMethod.HttpMethod.GET) public Email getUserEmail(User user) throws UnauthorizedException { if (user == null) { throw new UnauthorizedException("Invalid credentials"); } Email response = new Email(); response.setEmail(user.getEmail()); return response; }
Esegui di nuovo il deployment dell'API ogni volta che aggiungi nuovi client.
Aggiunta dell'autenticazione Auth0 a un client
Puoi aggiungere l'autenticazione Auth0 al tuo codice come descritto nella documentazione di Auth0. Il client deve essere elencato nella configurazione dell'emittente Auth0 dell'API.
Autenticazione con i token ID Google
Per supportare le chiamate dai client che eseguono l'autenticazione mediante i token ID Google:
Ottieni un ID client OAuth 2 per ogni applicazione client. Il proprietario dell'applicazione client deve generare l'ID client dalla console Google Cloud. Per le istruzioni, consulta Creazione degli ID client.
Nell'annotazione
@Api
, aggiungi una voceclientIds
contenente l'ID client per ogni app client a cui concedi l'accesso, nonché una voceaudiences
per ogni client Android.Ad esempio:
@Api( name = "YOUR_API_NAME", version = "VERSION_NUMBER", clientIds = {"YOUR_CLIENT_ID"}, audiences = {"YOUR_CLIENT_ID"} )
- Sostituisci
YOUR_API_NAME
con il nome della tua API. - Sostituisci
VERSION_NUMBER
con la versione dell'API, ad esempiov1
. - Sostituisci
YOUR_CLIENT_ID
con l'ID client OAuth 2 generato nel progetto dell'applicazione client.
- Sostituisci
Nel codice di implementazione dell'API, importa
Users
:import com.google.api.server.spi.auth.common.User;
In ogni metodo API in cui vuoi verificare l'autenticazione corretta, verifica la presenza di un
User
valido e, se non è presente, genera un'eccezione, come mostrato nella definizione del metodo di esempio:@ApiMethod(httpMethod = ApiMethod.HttpMethod.GET) public Email getUserEmail(User user) throws UnauthorizedException { if (user == null) { throw new UnauthorizedException("Invalid credentials"); } Email response = new Email(); response.setEmail(user.getEmail()); return response; }
Esegui di nuovo il deployment dell'API ogni volta che aggiungi nuovi client.
Aggiunta dell'autenticazione dei token ID Google a un client
Per informazioni sull'aggiunta del codice di autenticazione ai client, vedi quanto segue:
Invio di un JWT al client
Se utilizzi un JWT nel client per inviare richieste autenticate all'API, il JWT deve trovarsi nell'intestazione di autorizzazione di una richiesta HTTP. Il JWT deve avere le seguenti dichiarazioni obbligatorie:
iss
sub
aud
iat
exp
Passaggi successivi
Per informazioni di base sull'autenticazione utente e su come si differenzia dall'autorizzazione delle chiavi API, consulta Quando e perché utilizzare le chiavi API.