Cómo autenticar usuarios

En esta página, se describe cómo agregar compatibilidad en tu API para la autenticación de usuarios desde aplicaciones cliente mediante el uso de Cloud Endpoints Frameworks. Ten en cuenta que los clientes de Android y JavaScript son compatibles.

Endpoints Frameworks admite la autenticación de usuarios desde aplicaciones cliente que usen cualquiera de las siguientes metodologías:

Sin importar qué método de autenticación uses, en cada método API en el que desees comprobar la autenticación correcta debes buscar un User válido, como se describe en las secciones que aparecen a continuación:

Requisitos previos

En esta página, se supone que ya:

Cómo autenticar con Firebase Auth

Para admitir llamadas de clientes que usan Firebase Auth:

  1. Crea un proyecto de Firebase, si aún no lo hiciste. Los proyectos de Firebase son proyectos de Google Cloud Console que usan los servicios de Firebase. Para obtener más información, consulta ¿Qué es un proyecto de Firebase? y la documentación de Firebase.

  2. Agrega lo siguiente a tu anotación del método o @Api:

    • Agrega un parámetro authenticators a tu anotación, configurado como el valor {EspAuthenticator.class}.
    • Agrega un parámetro issuers que contenga un @ApiIssuer configurado en Firebase.
    • Agrega un parámetro issuerAudiences que contenga un @ApiIssuerAudience configurado en Firebase y el ID de tu proyecto.

    Por ejemplo:

    @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")
        })
    
    • Reemplaza YOUR_API_NAME por el nombre de tu API.
    • Reemplaza VERSION_NUMBER con la versión de tu API, por ejemplo, v1.
    • Reemplaza ambas instancias de YOUR_PROJECT_ID con el ID del proyecto de Firebase.
  3. En el código de implementación de la API, importa Users:

    import com.google.api.server.spi.auth.common.User;
    
  4. En cada método de API donde quieras verificar la autenticación correcta, comprueba si hay un User válido y arroja una excepción si no hay uno, como se muestra en la definición del método de muestra:

    @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. Vuelve a implementar la API cada vez que agregues clientes nuevos.

Cómo agregar la autenticación de Firebase a un cliente

Puedes agregar la autenticación de Firebase a tu código como se explica en la documentación de Firebase. El cliente debe tener un proyecto de Google Cloud asociado, y el ID del proyecto debe aparecer en la configuración del emisor de Firebase de la API como se muestra en la sección anterior.

Autentica con Auth0

Para admitir llamadas de clientes que usan Auth0:

  1. Agrega lo siguiente a tu anotación del método o @Api:

    • Agrega un parámetro authenticators a la anotación, configurado como el valor {EspAuthenticator.class}.
    • Agrega un parámetro issuers que contenga un @ApiIssuer configurado en Auth0.
    • Agrega un parámetro issuerAudiences que contenga un @ApiIssuerAudience configurado en Auth0 y tu ID de cliente de Auth0.

    Por ejemplo:

    @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")
        })
    
    • Reemplaza YOUR_API_NAME por el nombre de tu API.
    • Reemplaza VERSION_NUMBER con la versión de tu API, por ejemplo, v1.
    • Reemplaza YOUR_ACCOUNT_NAME con el nombre de cuenta de Auth0 que se usa para el cliente.
    • Reemplaza AUTH0_CLIENT_ID con el ID que deseas usar para el cliente.
  2. En el código de implementación de la API, importa Users:

    import com.google.api.server.spi.auth.common.User;
    
  3. En cada método de API donde quieras verificar la autenticación correcta, comprueba si hay un User válido y arroja una excepción si no hay uno, como se muestra en la definición del método de muestra:

    @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. Vuelve a implementar la API cada vez que agregues clientes nuevos.

Cómo agregar la autenticación de Auth0 a un cliente

Puedes agregar la autenticación de Auth0 a tu código como se explica en la documentación de Auth0. El cliente debe aparecer en la configuración del emisor de Auth0 de la API.

Cómo autenticar con tokens de ID de Google

Para admitir llamadas de clientes que usan tokens de ID de Google, sigue estos pasos:

  1. Obtén un ID de cliente de OAuth 2 para cada aplicación cliente. El propietario de la aplicación cliente debe generar el ID de cliente a partir de la consola de Google Cloud. Para obtener instrucciones, consulta Cómo crear ID de cliente.

  2. Agrega una entrada de clientIds que contenga el ID de cliente para cada aplicación cliente a la que le otorgues acceso, y también una entrada de audiences para cada cliente de Android, en tu anotación de @Api.

    Por ejemplo:

    @Api(
       name = "YOUR_API_NAME",
       version = "VERSION_NUMBER",
       clientIds = {"YOUR_CLIENT_ID"},
       audiences = {"YOUR_CLIENT_ID"}
    )
    
    • Reemplaza YOUR_API_NAME por el nombre de tu API.
    • Reemplaza VERSION_NUMBER con la versión de tu API, por ejemplo, v1.
    • Reemplaza YOUR_CLIENT_ID con el ID de cliente de OAuth 2 que se generó en el proyecto de la aplicación cliente.
  3. En el código de implementación de la API, importa Users:

    import com.google.api.server.spi.auth.common.User;
    
  4. En cada método de API donde quieras verificar la autenticación correcta, comprueba si hay un User válido y arroja una excepción si no hay uno, como se muestra en la definición del método de muestra:

    @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. Vuelve a implementar la API cada vez que agregues clientes nuevos.

Cómo agregar la autenticación de los tokens de ID de Google a un cliente

Para obtener información sobre cómo agregar código de autenticación a los clientes, consulta lo siguiente:

Envía un JWT en tu cliente

Si usas un JWT en tu cliente para enviar solicitudes autenticadas a la API, el JWT debe estar en el encabezado de autorización de una solicitud HTTP. El JWT debe tener las siguientes reclamaciones obligatorias:

  • iss
  • sub
  • aud
  • iat
  • exp

¿Qué sigue?

Para obtener más información sobre la autenticación de usuarios y cómo difiere de la autorización de clave de API, consulta Cuándo y por qué usar claves de API.