Saltar al contenido
Documentación · Televisores y línea de comandos

Televisores, videoconsolas y herramientas de línea de comandos

A un televisor le cuesta mostrar una página de inicio de sesión, y una herramienta de línea de comandos no debería pedir una contraseña. Con el flujo de dispositivo, el dispositivo muestra un código corto y la persona lo escribe en el Lobby de su entorno desde su móvil o su ordenador, donde ya ha iniciado sesión.

Registra la app

En Usher Console, abre el entorno y ve a Aplicaciones → Nueva aplicación → TV o línea de comandos. Recibe un ID de cliente y ningún secreto: un dispositivo no puede guardarlo.

El flujo

Terminal
# 1. the device asks for a code
curl -s -X POST https://acme.usherid.com/api/auth/device/code \
  -d client_id=YOUR_CLIENT_ID -d scope='openid email offline_access'
# → { "device_code": "…", "user_code": "6L95PBQQ",
#     "verification_uri": "https://acme.usherid.com/device",
#     "verification_uri_complete": "https://acme.usherid.com/device?user_code=6L95PBQQ",
#     "expires_in": 600, "interval": 5 }

# 2. it shows the code (and a QR code of verification_uri_complete), then polls
curl -s -X POST https://acme.usherid.com/api/auth/oauth2/token \
  -d grant_type=urn:ietf:params:oauth:grant-type:device_code \
  -d device_code=… -d client_id=YOUR_CLIENT_ID
# → { "error": "authorization_pending" } until the person allows it,
#   then { "access_token": "…", "id_token": "…", "refresh_token": "…" }
  • Consulta sin prisas. Espera interval segundos entre consultas. Si consultas más rápido, la respuesta es slow_down.
  • Para cuando te lo digan. access_denied significa que la persona lo ha rechazado; expired_token, que han pasado diez minutos. Pide un código nuevo.
  • Muestra también la dirección. No todo el mundo puede escanear un código QR: muestra verification_uri y el código, separado así: 6L95-PBQQ.

En /device, el Lobby muestra a la persona qué app lo pide y para qué. Le indica que continúe solo si lo ha iniciado ella misma y su dispositivo muestra el mismo código.

Vincula los tokens al dispositivo (DPoP)

Un token copiado de un dispositivo sigue siendo un token. Con DPoP (RFC 9449), el dispositivo guarda una clave privada y envía una prueba firmada nueva con cada petición. Un token vinculado a esa clave no sirve de nada sin ella.

  • Pide tokens vinculados: envía una cabecera DPoP con tus peticiones de token, y Usher vinculará a tu clave lo que emita (token_type es DPoP).
  • Exígelos: activa Exigir DPoP al crear la app. A partir de ahí, Usher no le emite ningún token sin una prueba.
  • Úsalos con Authorization: DPoP <token>, junto con una prueba para esa petición.
  • Bibliotecas: la mayoría de las bibliotecas de OAuth compatibles con DPoP hacen todo esto por ti (por ejemplo, la opción DPoP de openid-client).