Autenticazione degli utenti

Questa pagina descrive come aggiungere il supporto nell'API per l'autenticazione utente dalle applicazioni client utilizzando Cloud Endpoints Frameworks. Tieni presente che al momento sono supportati i client Android e JavaScript.

Endpoints Frameworks supporta l'autenticazione utente dalle applicazioni client che utilizzano una 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 sezioni seguenti:

Prerequisiti

Questa pagina presuppone che tu abbia già:

Autenticazione con Firebase Auth

Per supportare le chiamate dai clienti che utilizzano Firebase Auth:

  1. Se non l'hai ancora fatto, crea un progetto Firebase. I progetti Firebase sono Google Cloud progetti della console che utilizzano i servizi Firebase. Per saperne di più, consulta Che cos'è un progetto Firebase? e la documentazione di Firebase.

  2. 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 @ApiIssuer impostato su Firebase.
    • Aggiungi un parametro issuerAudiences contenente un @ApiIssuerAudience impostato su Firebase e l'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 esempio v1.
    • Sostituisci entrambe le istanze di YOUR_PROJECT_ID con l'ID progetto Firebase.
  3. Nel codice di implementazione dell'API, importa Users:

    import com.google.api.server.spi.auth.common.User;
    
  4. In ogni metodo API in cui vuoi verificare l'autenticazione corretta, controlla che sia presente un User valido e genera un'eccezione in caso contrario, come mostrato in questa definizione di 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;
    }
    
  5. Esegui nuovamente 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. Il client deve avere un Google Cloud progetto associato 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 dei clienti che utilizzano Auth0:

  1. 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 @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 tua versione dell'API, ad esempio v1.
    • Sostituisci YOUR_ACCOUNT_NAME con il nome dell'account Auth0 utilizzato per il cliente.
    • Sostituisci AUTH0_CLIENT_ID con l'ID che vuoi utilizzare per il tuo client.
  2. Nel codice di implementazione dell'API, importa Users:

    import com.google.api.server.spi.auth.common.User;
    
  3. In ogni metodo API in cui vuoi verificare l'autenticazione corretta, controlla che sia presente un User valido e genera un'eccezione in caso contrario, come mostrato in questa definizione di 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;
    }
    
  4. Esegui nuovamente 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 utilizzando i token ID Google:

  1. 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, vedi Creare ID client.

  2. Aggiungi una voce clientIds contenente l'ID client per ogni app client a cui concedi l'accesso e una voce audiences per ogni client Android nell'annotazione @Api.

    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 tua versione dell'API, ad esempio v1.
    • Sostituisci YOUR_CLIENT_ID con l'ID client OAuth 2 generato nel progetto dell'applicazione client.
  3. Nel codice di implementazione dell'API, importa Users:

    import com.google.api.server.spi.auth.common.User;
    
  4. In ogni metodo API in cui vuoi verificare la corretta autenticazione, controlla che sia presente un User valido e genera un'eccezione in caso contrario, come mostrato in questa definizione di 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;
    }
    
  5. Esegui nuovamente il deployment dell'API ogni volta che aggiungi nuovi client.

Aggiunta dell'autenticazione con token ID Google a un client

Per informazioni sull'aggiunta del codice di autenticazione ai client, consulta quanto segue:

Invio di un JWT nel 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 rivendicazioni obbligatorie:

  • iss
  • sub
  • aud
  • iat
  • exp

Passaggi successivi

Per informazioni di base sull'autenticazione utente e su come si differenzia dall'autorizzazione della chiave API, consulta Quando e perché utilizzare le chiavi API.