Curso de Autenticación con OAuth
Implementando
Artículo
Resource Owner Password
Grant
glrodasz
3 de Diciembre de 2018
Aplicaciones altamente confiables pueden usar este flujo, ya que en este flujo se le
pregunta al usuario final llenar sus credenciales (usuario/contraseña) con un formulario
interactivo y luego la información es enviada al authorization server.
Usa este flujo solo si lo siguiente aplica:
Se le puede confiar absolutamente a la aplicación las credenciales del usuario. Para
aplicaciones del lado del cliente o aplicaciones mobile se recomienda usar otros
flujos.
Un flujo basado en redireccionamiento no es posible debido a que es una apliación
legada. Si el redireccionamiento es posible se recomienda usar mejor Authorization
Code Grant.
Conociendo el flujo
La definición de Resource Owner Password Grant puede ser encontrada
en [Link]
1. El usuario final ingresa sus credenciales en la aplicación (cliente) mediante un
formulario.
2. La aplicación envía las credenciales al Authorization Server.
3. El Authorization Server valida las credenciales y devuelve un Access Token.
4. La aplicacion ahora puede usar el Access Token para llamar la API en nombre del
usuario.
Detalles de implementación
Para su implementación se debe implementar de parte de la aplicación un formulario
que tome las credenciales del usuario y luego pueda hacer una petición al Authorization
Server. Es sumamente importante que esto suceda en una conexión segura HTTPS.
1. La aplicación obtiene las credenciales desde el formulario.
2. La aplicación hace una petición al Authorization Server.
const request = require("request");
const options = {
method: "POST",
url: "[Link]
headers: { "content-type": "application/json" },
body: {
grant_type: "password",
username: "<username>",
password: "<password>",
audience: "<your-audience>",
scope: "<your-scopes>",
client_id: "<your-client-id>",
client_secret: "<your-client-secret>"
},
json: true
};
request(options, function(error, response, body) {
if (error) {
throw new Error(error);
}
[Link](body);
});
3. La respuesta tiene un JSON Web Token, generalmente de tipo Bearer incluyendo el
tiempo de expiración.
{
"access_token": "eyJz93a...k4laUWw",
"token_type": "Bearer",
"expires_in": 36000
}
4. La aplicación ya puede usar el JSON Web Token para hacer peticiones a los recursos
del usuario (API) en nombre de él.
const request = require("request");
const options = {
method: "GET",
url: "[Link]
headers: {
authorization: "Bearer <access-token>",
"content-type": "application/json"
}
};
request(options, function(error, response, body) {
if (error) throw new Error(error);
[Link](body);
});
Con esto tenemos los conocimientos necesarios para poder implementar este flujo.
Recuerda seguir las recomendaciones para darle un uso adecuado.