टीव्ही, कन्सोल आणि कमांड-लाइन टूल
टीव्हीला साइन-इन पेज दाखवणे सोपे नसते, आणि कमांड-लाइन टूलने पासवर्ड मागू नये. डिव्हाइस फ्लोमध्ये, डिव्हाइस एक छोटा कोड दाखवते, आणि व्यक्ती तो त्यांच्या फोन किंवा कॉम्प्युटरवर, जिथे ते आधीच साइन इन आहेत, एन्व्हायर्नमेंटच्या लॉबीमध्ये टाइप करते.
ॲप नोंदवा
Usher Console मध्ये, एन्व्हायर्नमेंट उघडा, मग ॲप्लिकेशन → नवीन ॲप्लिकेशन → टीव्ही किंवा कमांड लाइन. त्याला क्लायंट 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 वर, कोणते ॲप आणि कशासाठी विचारत आहे हे लॉबी व्यक्तीला दाखवते. त्यांनी स्वतःच हे सुरू केले असेल आणि त्यांच्या डिव्हाइसवर तोच कोड दिसत असेल, तरच पुढे जा असे ती सांगते.
टोकन डिव्हाइसशी बांधा (DPoP)
डिव्हाइसवरून कॉपी केलेले टोकन तरीही टोकनच असते. DPoP (RFC 9449) सह, डिव्हाइस एक प्रायव्हेट की ठेवते आणि प्रत्येक विनंतीसोबत नवीन सही केलेला प्रूफ पाठवते. त्या की शी बांधलेले टोकन तिच्याशिवाय निरुपयोगी असते.
- बांधलेले टोकन मागा: तुमच्या टोकन विनंत्यांसोबत
DPoPहेडर पाठवा, आणि Usher जे जारी करतो ते तुमच्या की शी बांधतो (token_typeहेDPoPअसते). - ते अनिवार्य करा: ॲप तयार करताना DPoP अनिवार्य सुरू करा. मग Usher त्याला प्रूफशिवाय कोणतेही टोकन जारी करत नाही.
- ते वापरा
Authorization: DPoP <token>सह, आणि त्या विनंतीसाठी एका प्रूफसह. - लायब्ररी: DPoP सपोर्ट असलेल्या बहुतेक OAuth लायब्ररी हे सर्व तुमच्यासाठी करतात (उदाहरणार्थ,
openid-clientचाDPoPपर्याय).