# data[].attributes.body
Una vez que se entienden los términos y conceptos que hemos explicado en el punto anterior, es mucho más fácil comprender los diferentes tipos de flujos del protocolo

Cliente

Sería la aplicación que quiere acceder a la cuenta de usuario de un determinado servicio, como Facebook, Twitter, Google, etc.

Usuario

El usuario es quien autoriza a la aplicación a acceder a su cuenta, mediante una ventana emergente que pide autorización, y normalmente se incluye información sobre los datos que se van a compartir al servicio nuevo.

Servidor

El servidor de autorización recibe las peticiones de acceso de aplicaciones que desean usar el inicio de sesión de algunos de los servicios como Facebook, Twitter o Google por ejemplo, para iniciar sesión en alguna página web, juego, etc. Este servidor se encarga de verificar la identidad del usuario y del servicio que solicita acceso, permitiendo o denegando el acceso.

# data[].attributes.body
Flujo de Protocolo del lado del cliente

# data[].attributes.body
El tipo de otorgamiento más usado es el código de autorización, ya que ha sido optimizado para aplicaciones del lado del servidor, en donde el código fuente no está expuesto públicamente y se puede mantener la confidencialidad del secreto de cliente.

# data[].attributes.body
Este es un flujo basado en la reorientación (redirection), que significa que la aplicación debe ser capaz de interactuar con el agente de usuario (i.e. el navegador web del usuario) y recibir códigos de autorización API que se enrutan a través del agente de usuario.

# data[].attributes.headline
Ahora describiremos el flujo del código autorizado 

# data[].attributes.subject
Ahora describiremos el flujo del código autorizado 

# data[].attributes.headline
Paso 1: Enlace de código de autorización

# data[].attributes.subject
Paso 1: Enlace de código de autorización

# data[].attributes.body
JPrimero se le da al usuario un enlace de código de autorización similar al siguiente.

https://cloud.digitalocean.com/v1/oauth/authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=CALLBACK_URL&scope=read

A continuación se presenta una explicación de los componentes del enlace:

client_id=client_id: el ID de cliente (cómo la API identifica la aplicación)

redirect_uri=CALLBACK_URL: donde el servicio reorienta al agente-usuario después de que se otorgue un código de autorización

response_type=code: especifica que tu aplicación está solicitando un código de autorización

scope=read: especifica el nivel de acceso que la aplicación está solicitando

# data[].attributes.headline
Paso 2: El usuario autoriza a la aplicación

# data[].attributes.subject
Paso 2: El usuario autoriza a la aplicación

# data[].attributes.body
aplicación

Cuando el usuario hace clic en el enlace, debe primero iniciar sesión en el servicio para autenticar su identidad (a menos que ya haya iniciado sesión). Luego, el servicio solicitará autorizar o denegar el acceso de la aplicación a su cuenta.

# data[].attributes.headline
Paso 3: La aplicación recibe el código de autorización

# data[].attributes.subject
Paso 3: La aplicación recibe el código de autorización

# data[].attributes.body
Si el usuario hace clic en “Authorize Application”, el servicio reorienta el agente-usuario al “redirect URI” de la aplicación, que se especificó durante el registro del cliente, junto con un código de autorización. La reorientación sería algo así (suponiendo que la aplicación es “dropletbook.com”):

https://dropletbook.com/callback?code=AUTHORIZATION_CODE

# data[].attributes.headline
Paso 4: La aplicación solicita token de acceso

# data[].attributes.subject
Paso 4: La aplicación solicita token de acceso

# data[].attributes.body
La aplicación solicita un token de acceso de la API, pasándole el código de autorización junto con los detalles de autenticación, incluido el secreto del cliente, a la terminal del token de la API. A continuación se presenta un ejemplo de una solicitud POST para la conexión del token de DigitalOcean:

https://cloud.digitalocean.com/v1/oauth/token?client_id=CLIENT_ID&client_secret=CLIENT_SECRET&grant_type=authorization_code&code=AUTHORIZATION_COD

# data[].attributes.headline
Paso 5: La aplicación recibe el token de acceso

# data[].attributes.subject
Paso 5: La aplicación recibe el token de acceso

# data[].attributes.body
Si la autorización es válida, la API enviará una respuesta a la aplicación, con el token de acceso (y, opcionalmente, un token de actualización). La respuesta completa se verá más o menos así:

{"access_token":"ACCESS_TOKEN","token_type":"bearer","expires_in":2592000,"refresh_token":"REFRESH_TOKEN","scope":"read","uid":100101

¡Ahora la aplicación está autorizada! Ella puede utilizar el token para acceder a la cuenta del usuario a través de la API de servicio, limitada al alcance del acceso, hasta que el token caduque o se revoque. Si se generó un token de actualización, éste se puede usar para solicitar nuevos tokens de acceso cuando el token original ha caducado.

# data[].attributes.body
El tipo de otorgamiento implícito se utiliza para aplicaciones móviles y aplicaciones web (i.e. aplicaciones que se ejecutan en un navegador web), donde no se garantiza la confidencialidad del secreto de cliente.

El tipo de otorgamiento implícito también es un flujo basado en la reorientación, pero el token de acceso se entrega al agente-usuario para reenviarlo a la aplicación, por lo que puede estar expuesto al usuario y a otras aplicaciones en el dispositivo del usuario

# data[].attributes.body
El flujo de otorgamiento implícito básicamente funciona de la siguiente manera: se le solicita al usuario que autorice la aplicación, luego el servidor de autorización pasa el token de acceso al agente-usuario, quien a su vez se lo pasa a la aplicación.

# data[].attributes.headline
Paso 1: Enlace de autorización implícita

# data[].attributes.subject
Paso 1: Enlace de autorización implícita

# data[].attributes.body
Con el tipo de solicitud implícita, se le presenta al usuario un enlace de autorización que solicita un token de la API. Este enlace se parece al enlace del código de autorización, excepto que está solicitando un token en lugar de un código (ten en cuenta el tipo de respuesta “token”):

https://cloud.digitalocean.com/v1/oauth/authorize?response_type=token&client_id=CLIENT_ID&redirect_uri=CALLBACK_URL&scope=read

# data[].attributes.headline
Paso 2: El usuario autoriza a la aplicación

# data[].attributes.subject
Paso 2: El usuario autoriza a la aplicación

# data[].attributes.body
Cuando el usuario hace clic en el enlace, primero debe iniciar sesión en el servicio para autenticar su identidad (a menos que previamente haya iniciado sesión). Luego, el servicio le solicitará que autorice o deniegue el acceso de la aplicación a su cuenta. A continuación se presenta un ejemplo de autorización de aplicación:

# data[].attributes.headline
Paso 3: El agente-usuario recibe el token de acceso con Redirect URI

# data[].attributes.subject
Paso 3: El agente-usuario recibe el token de acceso con Redirect URI

# data[].attributes.body
Si el usuario hace clic en “Authorize Application”, el servicio reorienta el usuario-agente al redirect URI de la aplicación e incluye un fragmento de URI que contiene el token de acceso. Se vería como algo así:

https://dropletbook.com/callback#token=ACCESS_TOKEN

# data[].attributes.headline
Paso 4: El agente-usuario sigue al Redirect URI

# data[].attributes.subject
Paso 4: El agente-usuario sigue al Redirect URI

# data[].attributes.body
La aplicación devuelve una página web que contiene una secuencia de comandos que puede extraer el token de acceso del redirect URI completo que ha conservado el usuario-agente.

# data[].attributes.headline
Paso 5: La aplicación envía el script de extracción de tokens de acceso

# data[].attributes.subject
Paso 5: La aplicación envía el script de extracción de tokens de acceso

# data[].attributes.body
La aplicación devuelve una página web que contiene una secuencia de comandos que puede extraer el token de acceso del redirect URI completo que ha conservado el usuario-agente.

# data[].attributes.headline
Paso 6: Token de acceso transferido a la aplicación

# data[].attributes.subject
Paso 6: Token de acceso transferido a la aplicación

# data[].attributes.body
El agente-usuario ejecuta el script proporcionado y pasa a la aplicación el token de acceso extraído.

¡Ahora la aplicación está autorizada! Ésta puede usar el token para acceder a la cuenta del usuario a través de la API de servicio, limitada al alcance del acceso, hasta que el token caduque o se revoque.

# data[].attributes.body
Con el tipo de otorgamiento de credenciales de contraseña del propietario del recurso, el usuario proporciona sus credenciales de servicio (nombre de usuario y contraseña) directamente a la aplicación, la cual utiliza dichas credenciales para obtener del servicio un token de acceso.

Además, solo debe utilizarse si la aplicación es confiable para el usuari

# data[].attributes.body
Después de que el usuario proporcione sus credenciales a la aplicación, ésta solicitará un token de acceso desde el servidor de autorizaciones. La solicitud POST puede ser similar a lo siguiente:

https://oauth.example.com/token?grant_type=password&username=USERNAME&password=PASSWORD&client_id=CLIENT_ID

Si se comprueban las credenciales del usuario, el servidor de autorización devuelve un token de acceso a la aplicación. ¡Ahora la aplicación está autorizada!

# data[].attributes.body
Nota: DigitalOcean actualmente no soporta el tipo de solicitud de credenciales de contraseña, así que el enlace apunta a un servidor de autorización imaginario, en “oauth.example.com”.

# data[].attributes.body
CONFIGURAR CUENTA DE OAUTH POR MEDIO DE GOOGLE

# data[].attributes.attachment_link.title
ID para OAuth 2.0 de Google | Tutorial de Angular 8 en Español

# data[].attributes.headline
Registro de auditoría de tokens de OAuthControlar el uso de aplicaciones de terceros y las solicitudes de acceso a datosComo administrador de tu organización, con el registro de auditoría de tokens de OAuth puedes hacer un seguimiento de qué usuarios están utilizando en tu dominio dispositivos móviles o aplicaciones web de terceros y saber cuáles exactamente están empleando. Por ejemplo, cuando un usuario abre una aplicación de G Suite Marketplace, en ese registro se guarda el nombre de la aplicación y el usuario que la ha utilizado. En el registro también se recoge cada vez que se autoriza a una aplicación de terceros a que acceda a datos de una cuenta de Google, como Contactos, Calendar y archivos de Drive (solo en G Suite).

# data[].attributes.subject
Registro de auditoría de tokens de OAuthControlar el uso de aplicaciones de terceros y las solicitudes de acceso a datosComo administrador de tu organización, con el registro de auditoría de tokens de OAuth puedes hacer un seguimiento de qué usuarios están utilizando en tu dominio dispositivos móviles o aplicaciones web de terceros y saber cuáles exactamente están empleando. Por ejemplo, cuando un usuario abre una aplicación de G Suite Marketplace, en ese registro se guarda el nombre de la aplicación y el usuario que la ha utilizado. En el registro también se recoge cada vez que se autoriza a una aplicación de terceros a que acceda a datos de una cuenta de Google, como Contactos, Calendar y archivos de Drive (solo en G Suite).

# data[].attributes.body
DATOS QUE SE PUEDEN CONSULTAR AL REGISTRO