Autenticar usuarios

En esta página se describe cómo añadir compatibilidad en tu API para la autenticación de usuarios desde aplicaciones cliente mediante Cloud Endpoints Frameworks. Ten en cuenta que, por el momento, se admiten clientes de Android y JavaScript.

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

Independientemente del método de autenticación que utilices, en cada método de la API en el que quieras comprobar que la autenticación es correcta, debes buscar un User válido, tal como se describe en las siguientes secciones:

Requisitos previos

En esta página se da por hecho que ya has hecho lo siguiente:

Autenticarse con Firebase Authentication

Para admitir llamadas de clientes que usan Firebase Auth, haz lo siguiente:

  1. Si aún no lo has hecho, crea un proyecto de Firebase. Los proyectos de Firebase son proyectos de la consola que usan servicios de Firebase. Google Cloud Para obtener más información, consulta ¿Qué es un proyecto de Firebase? y la documentación de Firebase.

  2. Añade lo siguiente a tu @Api o anotación de método:

    • Añade un parámetro authenticators a la anotación y asígnale el valor {EspAuthenticator.class}.
    • Añada a Firebase un parámetro issuers que contenga un @ApiIssuer.
    • Añade un parámetro issuerAudiences que contenga un @ApiIssuerAudience a Firebase y tu ID de 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")
        })
    
    • Sustituye YOUR_API_NAME por el nombre de tu API.
    • Sustituye VERSION_NUMBER por tu versión de la API (por ejemplo, v1).
    • Sustituye las dos instancias de YOUR_PROJECT_ID por el ID de tu 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 en el que quieras comprobar que la autenticación es correcta, comprueba que haya un User válido y genera una excepción si no lo hay, tal como se muestra en esta definición de método de ejemplo:

    @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 añadas clientes nuevos.

Añadir autenticación de Firebase a un cliente

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

Autenticarse con Auth0

Para admitir llamadas de clientes que usen Auth0, sigue estos pasos:

  1. Añade lo siguiente a tu @Api o anotación de método:

    • Añada un parámetro authenticators a su anotación y asígnele el valor {EspAuthenticator.class}.
    • Añade un parámetro issuers que contenga un @ApiIssuer definido en Auth0.
    • Añade un parámetro issuerAudiences que contenga un @ApiIssuerAudience a 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")
        })
    
    • Sustituye YOUR_API_NAME por el nombre de tu API.
    • Sustituye VERSION_NUMBER por tu versión de la API (por ejemplo, v1).
    • Sustituye YOUR_ACCOUNT_NAME por el nombre de la cuenta de Auth0 que se usa en el cliente.
    • Sustituye AUTH0_CLIENT_ID por el ID que quieras usar para tu 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 en el que quieras comprobar que la autenticación es correcta, comprueba que haya un User válido y genera una excepción si no lo hay, tal como se muestra en esta definición de método de ejemplo:

    @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 añadas clientes nuevos.

Añadir autenticación de Auth0 a un cliente

Puedes añadir la autenticación de Auth0 a tu código tal como se describe en la documentación de Auth0. El cliente debe figurar en la configuración del emisor de Auth0 de la API.

Autenticarse con tokens de ID de Google

Para admitir llamadas de clientes que se autentican mediante tokens de ID de Google, haz lo siguiente:

  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 desde la Google Cloud consola. Para ver instrucciones, consulta el artículo Crear IDs de cliente.

  2. Añade una entrada clientIds que contenga el ID de cliente de cada aplicación cliente a la que quieras dar acceso y una entrada audiences por cada cliente Android en tu anotación @Api.

    Por ejemplo:

    @Api(
       name = "YOUR_API_NAME",
       version = "VERSION_NUMBER",
       clientIds = {"YOUR_CLIENT_ID"},
       audiences = {"YOUR_CLIENT_ID"}
    )
    
    • Sustituye YOUR_API_NAME por el nombre de tu API.
    • Sustituye VERSION_NUMBER por tu versión de la API (por ejemplo, v1).
    • Sustituye YOUR_CLIENT_ID por 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 en el que quieras comprobar si la autenticación es correcta, busca un User válido y genera una excepción si no lo hay, como se muestra en esta definición de método de ejemplo:

    @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 añadas clientes nuevos.

Añadir la autenticación con tokens de ID de Google a un cliente

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

Enviar 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

Siguientes pasos

Para obtener información general sobre la autenticación de usuarios y en qué se diferencia de la autorización con claves de API, consulta Por qué y cuándo utilizar claves de API.