TVs, consoles e ferramentas de linha de comando
Uma TV não consegue mostrar uma página de início de sessão com facilidade, e uma ferramenta de linha de comando não deveria pedir uma senha. Com o fluxo de dispositivo, o dispositivo mostra um código curto, e a pessoa o digita no Lobby do ambiente, no celular ou no computador, onde a sessão dela já está iniciada.
Registre o app
No Usher Console, abra o ambiente e vá em Aplicações → Nova aplicação → TV ou linha de comando. Ela recebe um ID de cliente e nenhum segredo: um dispositivo não tem como mantê-lo em sigilo.
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 sem pressa. Espere
intervalsegundos entre as consultas. Consultas mais rápidas recebemslow_downcomo resposta. - Pare quando for avisado.
access_deniedsignifica que a pessoa recusou;expired_tokensignifica que se passaram dez minutos. Peça um novo código. - Mostre o endereço também. Nem todo mundo consegue ler um código QR: mostre
verification_urie o código, formatado como6L95-PBQQ.
Em /device, o Lobby mostra à pessoa qual app está pedindo acesso e para quê. Ele orienta a pessoa a continuar só se foi ela mesma quem começou e se o dispositivo dela mostra o mesmo código.
Vincule os tokens ao dispositivo (DPoP)
Um token copiado de um dispositivo continua sendo um token. Com DPoP (RFC 9449), o dispositivo guarda uma chave privada e envia uma prova assinada nova a cada requisição. Um token vinculado a essa chave é inútil sem ela.
- Peça tokens vinculados: envie um cabeçalho
DPoPcom as suas requisições de token, e o Usher vincula o que emitir à sua chave (token_typeéDPoP). - Exija-os: ative Exigir DPoP ao criar o app. A partir daí, o Usher não emite nenhum token para ele sem uma prova.
- Use-os com
Authorization: DPoP <token>, mais uma prova para essa requisição. - Bibliotecas: a maioria das bibliotecas OAuth com suporte a DPoP faz tudo isso por você (a opção
DPoPdoopenid-client, por exemplo).