বিষয়বস্তুতে যান
ডকুমেন্টেশন · টিভি ও কমান্ড-লাইন টুল

টিভি, কনসোল ও কমান্ড-লাইন টুল

একটি টিভি সহজে সাইন-ইন পৃষ্ঠা দেখাতে পারে না, আর একটি কমান্ড-লাইন টুলের পাসওয়ার্ড চাওয়া উচিত নয়। ডিভাইস ফ্লো-তে ডিভাইসটি একটি ছোট কোড দেখায়, এবং মানুষটি সেটি তাঁর ফোন বা কম্পিউটারে, যেখানে তিনি আগে থেকেই সাইন-ইন আছেন, তাঁর এনভায়রনমেন্টের লবিতে টাইপ করেন।

অ্যাপটি রেজিস্টার করুন

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 অপশন)।