Tipo de permiso de código de dispositivo
Utilice este tipo de concesión cuando un cliente se ejecuta en dispositivos que no tienen un método de entrada de datos fácil (por ejemplo, consolas de juegos, reproductores de medios de transmisión y marcos de imágenes digitales), y el cliente no puede recibir las solicitudes entrantes del servidor de autorización.
Por ejemplo, un cliente compra un Roku, un marco de imagen digital o una consola de juego. El cliente necesita un token de acceso para obtener películas, imágenes o juegos de la nube. En lugar de interactuar con el reproductor multimedia de transmisión del usuario (como un Roku) o el marco de imagen digital, el cliente le indica al usuario que utilice otro equipo o dispositivo (un equipo de escritorio, un teléfono inteligente o una tableta) y se conecte al servidor de autorización para aprobar la solicitud de acceso. Debido a que el cliente no puede recibir solicitudes entrantes, sondea el servidor de autorización repetidamente hasta que el usuario completa el proceso de aprobación.
El siguiente diagrama muestra el flujo Tipo de otorgamiento de código de dispositivo.
En este flujo OAuth:
Este flujo de dispositivos no utiliza el secreto de cliente para obtener el código de dispositivo y el código de usuario. El secreto de cliente se utiliza (si se asigna al cliente) al obtener el token de acceso.
-
Un cliente de dispositivo realiza una solicitud no autenticada en un punto final
/devicedel dominio de identidad. El dispositivo recibe un código de dispositivo, un código de usuario y un URI de verificación.El cliente de dispositivo muestra el código de usuario
(user_code)al usuario y proporciona la URL(verification-uri)a la que el usuario debe ir para introducir el código de usuario (no se muestra en el diagrama). -
El cliente del dispositivo no sabe si el usuario está autorizado. El cliente del dispositivo solicita el token de acceso repetidamente (a
oauth2/v1/token)en segundo plano hasta que el usuario introduce el código de usuario en la página de verificación). -
El usuario accede a la página de verificación, se conecta y, a continuación, introduce el código de usuario.
-
Una vez que el usuario introduce el código de usuario y autoriza el acceso, el servidor OAuth emite un token de acceso y el usuario tiene acceso a los datos protegidos a través del dispositivo.
| Función | Disponible |
|---|---|
| Interacción con el usuario final basada en explorador | Sí |
| Puede utilizar un proveedor de identidad externo para la autenticación | Sí |
| Se permite el símbolo de refrescamiento | Sí |
Consulte un ejemplo de Ejemplo de flujo de autorización de tipo de permiso de código de dispositivo.
Ejemplo de flujo de autorización de tipo de otorgamiento de código de dispositivo
El tipo de permiso Código de dispositivo proporciona un flujo de permiso específico en el que un cliente de dispositivo se ejecuta en un dispositivo que no tiene un método de entrada de datos fácil (por ejemplo, consolas de juegos, reproductores de medios de transmisión y marcos de imágenes digitales), y el cliente de dispositivo no puede recibir solicitudes entrantes del servidor de autorización.
Para obtener un token de acceso para acceder a recursos protegidos a través de un cliente de dispositivo, en lugar de interactuar directamente con el cliente de dispositivo, el cliente de dispositivo le indica al usuario que utilice otro equipo o dispositivo y se conecte al servidor de autorización para aprobar la solicitud de acceso. El cliente del dispositivo sondea el servidor de autorización repetidamente hasta que el usuario completa el proceso de aprobación.
Al crear una aplicación mediante el tipo de permiso Código de dispositivo en la consola del dominio de identidad, seleccione Código de dispositivo como tipo de permiso.
Consulte Tipo de permiso de código de dispositivo para obtener más información sobre el tipo de permiso de código de dispositivo y un diagrama de flujo de autorización.
Flujo de autorización
-
Un cliente de dispositivo realiza una solicitud no autenticada en el punto final
/oauth2/v1/device.La URL del evento contiene parámetros de consulta que indican el tipo de acceso que se solicita:
Ejemplo de solicitud
curl -i -k -H 'Authorization: application/x-www-form-urlencoded; charset=utf-8' --request POST 'https://<domainURL>/oauth2/v1/device' -d 'response_type=device_code&scope=http://example.com/quotes&client_id=<client-id>' -
La respuesta contiene un código de dispositivo, un código de usuario y un URI de verificación de la aplicación cliente OAuth.
Ejemplo de respuesta
{ "expires_in": 300, "device_code": "4d03f7bc-f7a5-4795-819a-5748c4801d35", "user_code": "SDFGHJKL", "verification_uri": "http://<domainURL>/ui/v1/device" } -
El dispositivo muestra el código de usuario
(user_code)y proporciona la URL(validation-uri)a la que el usuario debe ir para introducir el código de usuario. - La aplicación cliente de dispositivo no sabe si el usuario está autorizado. Mientras el usuario autoriza (o deniega) la solicitud del cliente, el cliente sondea repetidamente el servidor de autorización en el punto final de token
(oauth2/v1/token)para averiguar si el usuario ha completado el paso de autorización de usuario. El cliente incluye el código de verificación y su identificador de cliente en la solicitud.Ejemplo de solicitud: cliente confidencial
curl -i -k -H 'Authorization: application/x-www-form-urlencoded; charset=utf-8' -H 'Authorization: Basic <base64 clientid:secret> --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=urn:ietf:params:oauth:grant-type:device_code&device_code=4d03f7bc-f7a5-4795-819a-5748c4801d35'Ejemplo de solicitud: cliente público
curl -i -k -H 'Authorization: application/x-www-form-urlencoded; charset=utf-8' --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=urn:ietf:params:oauth:grant-type:device_code&client_id=3e51760ceb1245b7b77d0b1ff280bb72&device_code=4d03f7bc-f7a5-4795-819a-5748c4801d35'Ejemplo de solicitud mediante una afirmación de cliente
curl -i -k -H 'Authorization: application/x-www-form-urlencoded; charset=utf-8' --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=urn:ietf:params:oauth:grant-type:device_code&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer&client_assertion=<clientAssertion>&device_code=4d03f7bc-f7a5-4795-819a-5748c4801d35'Ejemplo de solicitud mediante una afirmación de SAML
curl -i -k -H 'Authorization: application/x-www-form-urlencoded; charset=utf-8' --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=urn:ietf:params:oauth:grant-type:device_code&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Asaml2-bearer&client_assertion=<samlAssertion>&device_code=4d03f7bc-f7a5-4795-819a-5748c4801d35'Ejemplo de solicitud usando mTLS
Para obtener información sobre cómo obtener
secureDomainURL, consulte Acceso a tipos de permiso.curl -v \ --cert cert.crt \ --key key.key \ --cacert ca.crt \ --location '<secureDomainURL>/oauth2/v1/token' \ --header 'Authorization: Basic <base64Encoded clientid:secret>' --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'grant_type=client_credentials' \ --data-urlencode 'client_id=<client-id>' \ --data-urlencode 'scope=urn:opc:idm:_myscopes_' - Una vez que el usuario introduce el código de usuario y autoriza el acceso, el servidor de autorización OAuth autentica al usuario y devuelve un token de acceso que contiene todos los ámbitos aplicables en función de los privilegios representados por los roles de aplicación otorgados a la aplicación cliente solicitante.
- El cliente del dispositivo solicitante utiliza el token de acceso en una llamada de API para obtener datos protegidos.