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:
- Cómo autenticar con Firebase Auth
- Cómo autenticar con Auth0
- Cómo autenticar con tokens de ID de Google
Requisitos previos
En esta página, se supone que ya:
Creaste un proyecto de Google Cloud.
Cómo autenticar con Firebase Auth
Para admitir llamadas de clientes que usan Firebase Auth:
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.
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.
- Agrega un parámetro
En el código de implementación de la API, importa
Users
:import com.google.api.server.spi.auth.common.User;
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; }
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:
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.
- Agrega un parámetro
En el código de implementación de la API, importa
Users
:import com.google.api.server.spi.auth.common.User;
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; }
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:
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.
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 deaudiences
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.
- Reemplaza
En el código de implementación de la API, importa
Users
:import com.google.api.server.spi.auth.common.User;
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; }
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.