الانتقال إلى المحتوى
الوثائق · أجهزة التلفزيون وأدوات سطر الأوامر

أجهزة التلفزيون ووحدات الألعاب وأدوات سطر الأوامر

لا يسهل على جهاز التلفزيون عرض صفحة تسجيل دخول، ولا ينبغي لأداة سطر الأوامر أن تطلب كلمة سر. مع تدفق الأجهزة، يعرض الجهاز رمزًا قصيرًا، فيكتبه الشخص في 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، مثلًا).