Este tutorial te ayudará a llamar a tu propia API mediante el flujo de contraseña del propietario del recurso. Si quieres obtener más información sobre cómo funciona el flujo y por qué deberías usarlo, consulta flujo de contraseña del propietario del recurso.
Requisitos previos
-
Registre su aplicación en Auth0.
- Seleccione un Tipo de aplicación de Aplicaciones web regulares.
- Agregue una URL de devolución de llamada permitida de
{https://yourApp/callback}. Este campo no puede dejarse sin definir o se devolverá un mensaje de error. - Asegúrese de que los Tipos de concesión de su aplicación incluyan Password. Para saber cómo hacerlo, lea Actualizar tipos de concesión.
- Si desea que su aplicación pueda usar tokens de actualización, asegúrese de que los Tipos de concesión de la aplicación incluyan Token de actualización. Para saber cómo hacerlo, lea Actualizar tipos de concesión. Para obtener más información sobre los tokens de actualización, lea Tokens de actualización.
-
Registre su API en Auth0
- Si desea que su API reciba tokens de actualización para poder obtener tokens nuevos cuando caduquen los anteriores, habilite Permitir acceso sin conexión.
-
Configure una conexión
- Asegúrese de que su conexión pueda autenticar usuarios con nombre de usuario y contraseña (por ejemplo, conexiones de base de datos, o AD/LDAP, ADFS o Azure Active Directory conexiones empresariales).
-
Actualice o deshabilite cualquier regla, de modo que solo afecten a conexiones específicas. Si obtiene un error
access_deniedal probar el Password Owner Resource Grant, esto podría deberse a una regla de control de acceso.
Pasos
- Configurar el inquilino:Establece la conexión predeterminada del inquilino.
- Solicitar tokens: Intercambia tu código de autorización por tokens.
- Llamar a la API: Usa el Token de acceso obtenido para llamar a tu API.
- Tokens de actualización: Usa un Token de actualización para solicitar nuevos tokens cuando caduquen los actuales.
Configurar el inquilino
- Vaya a Auth0 Dashboard > Tenant Settings y desplácese hacia abajo hasta encontrar la configuración Default Directory.
- Introduzca el nombre de la conexión que desea usar. Asegúrese de que pueda autenticar usuarios mediante username y contraseña.
Solicitar tokens
POST a la URL del token.
Ejemplo de solicitud POST a la URL del token
Parámetros
| Nombre del parámetro | Descripción |
|---|---|
grant_type | Establezca este valor en password. |
username | El username introducido por el usuario. |
password | La contraseña introducida por el usuario. |
client_id | El ID de cliente de su aplicación. Puede encontrar este valor en la configuración de la aplicación. |
client_assertion | Un JWT que contiene una aserción firmada con las credenciales de su aplicación. Es obligatorio cuando Private Key JWT es el método de autenticación de su aplicación. |
client_assertion_type | El valor es urn:ietf:params:oauth:client-assertion-type:jwt-bearer. Es obligatorio cuando Private Key JWT es el método de autenticación de la aplicación. |
client_secret | El Secreto del cliente de su aplicación. Es obligatorio cuando Client Secret es el método de autenticación de la aplicación y la configuración de la aplicación es Post o Basic. Si su aplicación no es de alta confianza (por ejemplo, una SPA), no establezca este parámetro. |
audience | La audiencia del token, es decir, su API. Puede encontrarla en el campo Identificador de la pestaña de configuración de su API. |
scope | Especifica los alcances para los que desea solicitar autorización, que determinan qué claims (o atributos de usuario) desea que se devuelvan. Deben estar separados por espacios. Puede solicitar cualquiera de los alcances estándar de OpenID Connect (OIDC) relacionados con el usuario, como profile o email, claims personalizados que sigan un formato con espacio de nombres, o cualquier alcance compatible con la API de destino (por ejemplo, read:contacts). Incluya offline_access para obtener un Token de actualización (asegúrese de que el campo Allow Offline Access esté habilitado en la configuración de la aplicación). |
Respuesta
HTTP 200 con una carga útil que incluye los valores access_token, refresh_token, id_token, token_type y expires_in:
Flujo de contraseña del propietario del recurso y alcances estándar
Debido a que proporcionar una contraseña otorga acceso total, cualquier intercambio basado en contraseña da acceso a todos los alcances. Por ejemplo, si no incluye alcances de API en la solicitud, todos los alcances de la API se incluirán en el Token de acceso. Del mismo modo, si incluye solo el scope
openid en la solicitud, se devolverán todos los alcances estándar de OpenID Connect relacionados con openid. En estos casos, el parámetro scope se incluirá en la respuesta y enumerará los alcances emitidos.Obtener información de usuario sin un ID Token
Si necesita información del usuario, incluya el scope
openid en su solicitud. Si la API usa RS256 como algoritmo de firma, el Token de acceso incluirá /userinfo como una audiencia válida, lo que significa que puede usarlo para llamar al endpoint /userinfo y recuperar los claims del usuario.Llamar a la API
Tokens de actualización
- configuraste tu API para permitir el acceso sin conexión
- incluiste el scope
offline_accesscuando iniciaste la solicitud de autenticación mediante el endpoint de autorización.
POST al endpoint /oauth/token de la Authentication API con grant_type=refresh_token.
Ejemplo de POST a la URL del token
Parámetros
| Nombre del parámetro | Descripción |
|---|---|
grant_type | Establécelo en refresh_token. |
client_id | El ID de cliente de tu aplicación. Puedes encontrar este valor en la configuración de la aplicación. |
refresh_token | El token de actualización que se debe usar. |
scope | (opcional) Una lista de alcances solicitados separada por espacios. Si no se envía, se usarán los alcances originales; de lo contrario, puedes solicitar un conjunto reducido de alcances. Ten en cuenta que debe estar codificada para URL. |
Respuesta
HTTP 200 con una carga útil que incluye un nuevo access_token, su duración en segundos (expires_in), los valores de scope concedidos y token_type.
Ejemplos de casos de uso
Personalizar tokens
Configurar la compatibilidad con realms
- Establecer el parámetro de solicitud
grant_typeenhttp://auth0.com/oauth/grant-type/password-realm. - Enviar un parámetro de solicitud adicional llamado
realmy establecerlo con el nombre del realm al que pertenece el usuario. Por ejemplo, si ha configurado una conexión de base de datos para empleados internos llamadaemployeesy el usuario pertenece a ella, establezcarealmenemployees.
Conexiones como realms
Cualquier conexión que admita autenticación activa puede configurarse como un realm, incluidas las conexiones de base de datos, las conexiones sin contraseña y las conexiones empresariales de AD/LDAP, ADFS y Azure Active Directory.