Open fernandoperezwh opened 2 years ago
Con su navegador dirijase a http://localhost:8012/api/auth/applications/register/ para crear una aplicación.
Llene el formulario como se muestra en la imagen de abajo, y antes de guardar tome nota del "Client id" y "Cliente secret" , lo usaremos en un momento.
Exporte las siguientes variables de entorno para que puedan ser accessibles y obtener como salida el enlace para seguir el flujo de Authorization code
export CLIENT_ID=NNsyTJGQ8IyjLWa8j38bEDc9Lf8wsblW2JxK50m6
export CLIENT_SECRET=MtwUKMJTk09XOuZJPExzpbKr07wXHQxww5KnequwWN5oPsPUqkrMwFDphl7LAQxSM83K9NaviNbkUPzKcmUxUQQWLDewGCWwSzjdMmn725FS15gLEYqAEJVOesKFIEkI
client_id
y client_secret
para obtener el credentialEste flujo es mas simple que el "Authorization Code". Necesitamos codificar el client_id
y client_secret
como
autenticacion base HTTP codificada en base64.
Con el siguiente comando podemos guardar en una variable de entorno llamada CREDENTIALS
el resultado de codificar el CLIENT_ID
y CLIENT_SECRET
export CREDENTIAL=$(printf '%s' $(printf "${CLIENT_ID}:${CLIENT_SECRET}" | base64) ; echo)
Para empezar el flujo de "Client Credential" debera llamar al endpoint /token/
curl -X POST \
-H "Authorization: Basic ${CREDENTIAL}" \
-H "Cache-Control: no-cache" \
-H "Content-Type: application/x-www-form-urlencoded" \
"http://localhost:8012/api/auth/token/" \
-d "grant_type=client_credentials"
Con su navegador dirijase a http://localhost:8012/api/auth/applications/register/ para crear una aplicación.
Llene el formulario como se muestra en la imagen de abajo, y antes de guardar tome nota del "Client id" y "Cliente secret" , lo usaremos en un momento.
Exporte las siguientes variables de entorno para que puedan ser accessibles y obtener como salida el enlace para seguir el flujo de Authorization code
export CLIENT_ID=NNsyTJGQ8IyjLWa8j38bEDc9Lf8wsblW2JxK50m6
export CLIENT_SECRET=MtwUKMJTk09XOuZJPExzpbKr07wXHQxww5KnequwWN5oPsPUqkrMwFDphl7LAQxSM83K9NaviNbkUPzKcmUxUQQWLDewGCWwSzjdMmn725FS15gLEYqAEJVOesKFIEkI
echo "http://localhost:8012/api/auth/authorize/?response_type=code&client_id=${CLIENT_ID}"
Copie la salida de lo anterior y peguelo en un navegador que cuentre con su sesión previamente abierta. Debe salir una vista similar a esta, de clic en el boton de Autorizar para continuar.
Al autorizar será redireccionado a la url que especifico en el formulario cuando registro la aplicación junto con un code
que podra utilizarse para obtener el Access Token
http://localhost:8012/oauth/callback?code=uVqLxiHDKIirldDZQfSnDsmYW1Abj2
Exporte ese code
a una variable de entorno
export CODE=uVqLxiHDKIirldDZQfSnDsmYW1Abj2
Obtener al Access Token
curl -X POST \
-H "Cache-Control: no-cache" \
-H "Content-Type: application/x-www-form-urlencoded" \
"http://localhost:8012/api/auth/token/" \
-d "client_id=${CLIENT_ID}" \
-d "client_secret=${CLIENT_SECRET}" \
-d "code=${CODE}" \
-d "grant_type=authorization_code"
Con su navegador dirijase a http://localhost:8012/api/auth/applications/register/ para crear una aplicación.
Llene el formulario como se muestra en la imagen de abajo, y antes de guardar tome nota del "Client id" y "Cliente secret" , lo usaremos en un momento.
Exporte las siguientes variables de entorno para que puedan ser accessibles
export USERNAME=fernando
export PASSWORD=fernando123
export CLIENT_ID=NNsyTJGQ8IyjLWa8j38bEDc9Lf8wsblW2JxK50m6
export CLIENT_SECRET=MtwUKMJTk09XOuZJPExzpbKr07wXHQxww5KnequwWN5oPsPUqkrMwFDphl7LAQxSM83K9NaviNbkUPzKcmUxUQQWLDewGCWwSzjdMmn725FS15gLEYqAEJVOesKFIEkI
curl -X POST "http://localhost:8012/api/auth/token/" \
-d "grant_type=password" \
-d "username=${USERNAME}" \
-d "password=${PASSWORD}" \
-u"${CLIENT_ID}:${CLIENT_SECRET}"
Con su navegador dirijase a http://localhost:8012/api/auth/applications/register/ para crear una aplicación.
Llene el formulario como se muestra en la imagen de abajo, y antes de guardar tome nota del "Client id" y "Cliente secret" , lo usaremos en un momento.
Exporte las siguientes variables de entorno para que puedan ser accessibles
export CLIENT_ID=NNsyTJGQ8IyjLWa8j38bEDc9Lf8wsblW2JxK50m6
export CLIENT_SECRET=MtwUKMJTk09XOuZJPExzpbKr07wXHQxww5KnequwWN5oPsPUqkrMwFDphl7LAQxSM83K9NaviNbkUPzKcmUxUQQWLDewGCWwSzjdMmn725FS15gLEYqAEJVOesKFIEkI
echo "http://localhost:8012/api/auth/authorize/?response_type=token&client_id=${CLIENT_ID}"
Al autorizar será redireccionado a la url que especifico en el formulario cuando registro la aplicación junto con el access_token
, refresh_token
, expires_in
y el scope
que vienen de forma implícita en el hash de la url.
http://localhost:8000/oauth/callback#access_token=DdPCKNSQ7vQWJKkCGLl5HnZNeI9TaQ&token_type=Bearer&state=&expires_in=36000&scope=read+write
Es similar al flujo de "Authorization code" pero con dos diferencias:
response_type=code
y en Implicit Grant response_type=token
.En el redirect url de Authorizacion Code Grant recibimos un code
para despues cambiarlo por un access_token
para mayor seguridad.
Sin embargo, en el Implicit Grant recibimos directamente en el hash de la url el access_token
, refresh_token
, expires_in
y el scope
.
"[...] La única razón restante para usar el flujo implícito es si el servidor de autorización no admite o no puede admitir solicitudes de origen cruzado (CORS). La concesión del código de autorización requiere que la aplicación de JavaScript realice una solicitud POST al servidor de autorización, por lo que el servidor de autorización deberá admitir los encabezados CORS apropiados para permitir que el navegador realice esa solicitud. Este es un cambio relativamente fácil de realizar si está creando su propio servidor de autorización, pero si está utilizando un servidor existente, es posible que tenga que usar la concesión implícita para sortear la limitación de CORS." .- What is the OAuth 2.0 Implicit Grant Type?
"El tipo de concesión de credenciales de contraseña del propietario del recurso es adecuado en los casos en que el propietario del recurso tiene una relación de confianza con el cliente, como el sistema operativo del dispositivo o una aplicación con muchos privilegios. El servidor de autorizaciones debe tener especial cuidado al habilitar este tipo de concesión y SOLO PERMITIRLO CUANDO OTROS FLUJOS NO SON VIABLES.". RFC 6749 The OAuth 2.0 Authorization Framework - Section 4.3