טלוויזיות, קונסולות וכלי שורת פקודה
לטלוויזיה לא קל להציג דף התחברות, וכלי שורת פקודה לא אמור לבקש סיסמה. בזרימת המכשיר, המכשיר מציג קוד קצר, והאדם מקליד אותו ב-Lobby של הסביבה בטלפון או במחשב שלו, שבהם הוא כבר מחובר.
רישום האפליקציה
ב-Usher Console, פותחים את הסביבה ועוברים אל אפליקציות ← אפליקציה חדשה ← טלוויזיה או שורת פקודה. האפליקציה מקבלת מזהה לקוח ולא מקבלת סוד: מכשיר לא יכול לשמור עליו.
הזרימה
מסוף
# 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>, ועם הוכחה לבקשה הזו. - ספריות: רוב ספריות ה-OAuth שתומכות ב-DPoP עושות את כל זה בשבילך (למשל, האפשרות
DPoPשלopenid-client).