TVs, consolas e ferramentas de linha de comandos
Uma TV não consegue mostrar facilmente uma página de início de sessão, e uma ferramenta de linha de comandos não deve pedir uma palavra-passe. Com o fluxo de dispositivo, o dispositivo mostra um código curto, e a pessoa introduz-o no Lobby do seu ambiente, no telemóvel ou no computador, onde já tem sessão iniciada.
Registe a app
Na Usher Console, abra o ambiente e escolha Aplicações → Nova aplicação → TV ou linha de comandos. A app recebe um ID de cliente e nenhum segredo: um dispositivo não consegue guardá-lo.
O fluxo
# 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": "…" }- Consulte com moderação. Espere
intervalsegundos entre consultas. Consultar mais depressa tem como respostaslow_down. - Pare quando lhe disserem.
access_deniedsignifica que a pessoa recusou;expired_tokensignifica que passaram dez minutos. Peça um novo código. - Mostre também o endereço. Nem toda a gente consegue ler um código QR: mostre o
verification_urie o código, espaçado como6L95-PBQQ.
Em /device, o Lobby mostra à pessoa que app está a pedir e o quê. Diz-lhe para continuar apenas se foi ela que iniciou o processo e se o seu dispositivo mostra o mesmo código.
Associe os tokens ao dispositivo (DPoP)
Um token copiado de um dispositivo continua a ser um token. Com DPoP (RFC 9449), o dispositivo guarda uma chave privada e envia uma nova prova assinada em cada pedido. Um token associado a essa chave é inútil sem ela.
- Peça tokens associados: envie um cabeçalho
DPoPnos seus pedidos de token, e o Usher associa o que emite à sua chave (otoken_typeéDPoP). - Exija-os: ative Exigir DPoP quando criar a app. A partir daí, o Usher não lhe emite nenhum token sem uma prova.
- Use-os com
Authorization: DPoP <token>, mais uma prova para esse pedido. - Bibliotecas: a maioria das bibliotecas OAuth com suporte para DPoP faz tudo isto por si (a opção
DPoPdoopenid-client, por exemplo).