TV, कंसोल और कमांड-लाइन टूल
TV पर साइन-इन पेज दिखाना आसान नहीं होता, और कमांड-लाइन टूल को पासवर्ड नहीं माँगना चाहिए। डिवाइस फ़्लो में डिवाइस एक छोटा कोड दिखाता है, और व्यक्ति उसे अपने फ़ोन या कंप्यूटर पर अपने एनवायरनमेंट की Lobby में टाइप करता है, जहाँ वह पहले से साइन इन है।
ऐप रजिस्टर करें
Usher Console में एनवायरनमेंट खोलें, फिर ऐप्लिकेशन → नया ऐप्लिकेशन → TV या कमांड लाइन पर जाएँ। इसे एक क्लाइंट ID मिलती है और कोई सीक्रेट नहीं: डिवाइस सीक्रेट सुरक्षित नहीं रख सकता।
फ़्लो
# 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": "…" }- आराम से पोल करें। हर पोल के बीच
intervalसेकंड रुकें। इससे तेज़ पोल करने पर जवाबslow_downमिलता है। - कहे जाने पर रुक जाएँ।
access_deniedका मतलब है कि व्यक्ति ने मना कर दिया;expired_tokenका मतलब है कि दस मिनट बीत गए। नया कोड माँगें। - पता भी दिखाएँ। हर कोई QR कोड स्कैन नहीं कर सकता:
verification_uriऔर कोड दिखाएँ,6L95-PBQQकी तरह बीच में जगह छोड़कर।
/device पर Lobby व्यक्ति को दिखाती है कि कौन-सा ऐप माँग रहा है, और क्या माँग रहा है। यह उन्हें आगे बढ़ने को तभी कहती है, जब उन्होंने ख़ुद यह शुरू किया हो और उनका डिवाइस वही कोड दिखा रहा हो।
टोकन को डिवाइस से बाँधें (DPoP)
डिवाइस से कॉपी किया गया टोकन भी आख़िर टोकन ही है। DPoP (RFC 9449) में डिवाइस एक प्राइवेट कुंजी रखता है, और हर अनुरोध के साथ एक नया साइन किया हुआ प्रूफ़ भेजता है। उस कुंजी से बंधा टोकन उसके बिना बेकार है।
- बंधे हुए टोकन माँगें: अपने टोकन अनुरोधों के साथ
DPoPहेडर भेजें, और Usher जो कुछ जारी करता है उसे आपकी कुंजी से बाँध देता है (token_typeका मानDPoPहोता है)। - इन्हें अनिवार्य करें: ऐप बनाते समय DPoP अनिवार्य करें चालू करें। फिर Usher उसे बिना प्रूफ़ के कोई टोकन जारी नहीं करता।
- इन्हें इस्तेमाल करें
Authorization: DPoP <token>के साथ, और उस अनुरोध के लिए एक प्रूफ़ भी भेजें। - लाइब्रेरी: DPoP सपोर्ट वाली ज़्यादातर OAuth लाइब्रेरी यह सब आपके लिए कर देती हैं (जैसे
openid-clientकाDPoPविकल्प)।