TV, કન્સોલ અને કમાન્ડ-લાઇન ટૂલ
TV સરળતાથી સાઇન-ઇન પેજ બતાવી શકતું નથી, અને કમાન્ડ-લાઇન ટૂલે પાસવર્ડ માંગવો ન જોઈએ. device flow માં, ડિવાઇસ એક ટૂંકો કોડ બતાવે છે, અને વ્યક્તિ તેને પોતાના ફોન કે કમ્પ્યુટર પર, જ્યાં તેઓ પહેલેથી સાઇન ઇન છે, એન્વાયર્નમેન્ટની લૉબીમાં ટાઇપ કરે છે.
ઍપ રજિસ્ટર કરો
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 પર, લૉબી વ્યક્તિને બતાવે છે કે કઈ ઍપ શેના માટે પૂછી રહી છે. તે તેમને ત્યારે જ આગળ વધવાનું કહે છે જો તેમણે જાતે શરૂ કર્યું હોય અને તેમનું ડિવાઇસ એ જ કોડ બતાવતું હોય.
ટોકનને ડિવાઇસ સાથે બાંધો (DPoP)
ડિવાઇસ પરથી કૉપિ કરેલું ટોકન પણ ટોકન જ છે. DPoP (RFC 9449) સાથે, ડિવાઇસ એક પ્રાઇવેટ કી રાખે છે અને દરેક વિનંતી સાથે નવો સાઇન કરેલો પુરાવો મોકલે છે. એ કી સાથે બંધાયેલું ટોકન તેના વિના નકામું છે.
- બંધાયેલાં ટોકન માંગો: તમારી ટોકન વિનંતીઓ સાથે
DPoPહેડર મોકલો, અને Usher જે જારી કરે છે તેને તમારી કી સાથે બાંધે છે (token_typeએDPoPહોય છે). - તેમને ફરજિયાત કરો: ઍપ બનાવો ત્યારે DPoP ફરજિયાત કરો ચાલુ કરો. પછી Usher તેને પુરાવા વિના કોઈ ટોકન જારી કરતું નથી.
- તેમને વાપરો
Authorization: DPoP <token>સાથે, અને એ વિનંતી માટેના પુરાવા સાથે. - લાઇબ્રેરી: DPoP ને સપોર્ટ કરતી મોટા ભાગની OAuth લાઇબ્રેરી આ બધું તમારા માટે કરે છે (ઉદાહરણ તરીકે,
openid-clientનોDPoPવિકલ્પ).