Pular para o conteúdo
Documentação · TVs e ferramentas de linha de comando

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

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": "…" }
  • Consulte sem pressa. Espere interval segundos entre as consultas. Consultas mais rápidas recebem slow_down como resposta.
  • Pare quando for avisado. access_denied significa que a pessoa recusou; expired_token significa 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_uri e o código, formatado como 6L95-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 DPoP com 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 DPoP do openid-client, por exemplo).