TV’ler, oyun konsolları ve komut satırı araçları
Bir TV kolayca giriş sayfası gösteremez, bir komut satırı aracı da parola istememelidir. Aygıt akışında aygıt kısa bir kod gösterir; kişi de bu kodu, zaten giriş yapmış olduğu telefonunda ya da bilgisayarında, ortamının Lobby’sine yazar.
Uygulamayı kaydedin
Usher Console’da ortamı açın, ardından Uygulamalar → Yeni uygulama → TV veya komut satırı yolunu izleyin. Uygulama bir istemci kimliği alır ama gizli anahtar almaz: bir aygıt gizli anahtar saklayamaz.
Akış
# 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": "…" }- Kibarca yoklayın. Yoklamalar arasında
intervalsaniye bekleyin. Daha sık yoklamayaslow_downyanıtı verilir. - Size söylendiğinde durun.
access_denied, kişinin reddettiği anlamına gelir;expired_token, on dakikanın geçtiği anlamına gelir. Yeni bir kod isteyin. - Adresi de gösterin. Herkes QR kod tarayamaz:
verification_uriadresini ve kodu6L95-PBQQgibi aralıklı olarak gösterin.
Lobby, /device adresinde kişiye hangi uygulamanın ne istediğini gösterir. Ona yalnızca işlemi kendisi başlattıysa ve aygıtında aynı kod görünüyorsa devam etmesini söyler.
Belirteçleri aygıta bağlayın (DPoP)
Bir aygıttan kopyalanan belirteç yine de bir belirteçtir. DPoP ile (RFC 9449) aygıt özel bir anahtar saklar ve her istekle birlikte yeni, imzalı bir kanıt gönderir. Bu anahtara bağlı bir belirteç, anahtar olmadan işe yaramaz.
- Bağlı belirteç isteyin: belirteç isteklerinizle birlikte bir
DPoPüst bilgisi gönderin; Usher da verdiklerini anahtarınıza bağlar (token_typedeğeriDPoPolur). - Zorunlu kılın: uygulamayı oluştururken DPoP’u zorunlu kıl seçeneğini açın. Usher bundan sonra o uygulamaya kanıt olmadan hiçbir belirteç vermez.
- Kullanın:
Authorization: DPoP <token>ile, o isteğe ait bir kanıtla birlikte. - Kütüphaneler: DPoP desteği olan OAuth kütüphanelerinin çoğu bunların hepsini sizin için yapar (örneğin
openid-clientkütüphanesininDPoPseçeneği).