ورود به سیستم در تلویزیون ها و دستگاه های ورودی محدود

می‌توانید به کاربران اجازه دهید با حساب‌های Google خود در دستگاه‌هایی با قابلیت ورودی محدود، مانند تلویزیون‌های متصل به اینترنت، به برنامه شما وارد شوند.

این برنامه یک کد کوتاه و URL ورود به سیستم را به کاربر نمایش می دهد. سپس، کاربر URL ورود به سیستم را در یک مرورگر وب باز می کند، کد را وارد می کند و به برنامه اجازه دسترسی به اطلاعات ورود به سیستم کاربر را می دهد. در نهایت برنامه تاییدیه دریافت می کند و کاربر وارد سیستم می شود.

برای استفاده از این جریان ورود به سیستم، برنامه باید روی دستگاهی اجرا شود که معیارهای زیر را داشته باشد:

  • دستگاه باید بتواند یک URL 40 نویسه ای و یک کد کاربری 15 نویسه ای را به همراه دستورالعمل هایی برای کاربر نمایش دهد.
  • دستگاه باید به اینترنت متصل باشد.

شناسه مشتری و راز مشتری دریافت کنید

برنامه شما به شناسه سرویس گیرنده OAuth 2.0 و راز سرویس گیرنده نیاز دارد تا به نقاط پایانی ورود به سیستم Google درخواست دهد.

برای پیدا کردن شناسه مشتری و رمز مشتری پروژه خود، موارد زیر را انجام دهید:

  1. یک اعتبارنامه OAuth 2.0 موجود را انتخاب کنید یا صفحه اعتبارنامه ها را باز کنید.
  2. اگر قبلاً این کار را انجام نداده اید، اعتبارنامه OAuth 2.0 پروژه خود را با کلیک کردن روی ایجاد اعتبار > شناسه مشتری OAuth و ارائه اطلاعات مورد نیاز برای ایجاد اعتبارنامه ایجاد کنید.
  3. به دنبال شناسه مشتری در بخش شناسه های مشتری OAuth 2.0 بگردید. برای جزئیات، روی شناسه مشتری کلیک کنید.

اگر در حال ایجاد شناسه مشتری جدید هستید، نوع برنامه تلویزیون ها و دستگاه های ورودی محدود را انتخاب کنید.

کد کاربری و URL تأیید را دریافت کنید

هنگامی که کاربر درخواست ورود به سیستم با استفاده از یک حساب Google را می‌دهد، با ارسال یک درخواست HTTP POST به نقطه پایانی دستگاه OAuth 2.0، https://oauth2.googleapis.com/device/code ، کد کاربری و URL تأیید را دریافت می‌کنید. شناسه مشتری خود و لیستی از حوزه های مورد نیاز خود را با درخواست وارد کنید. اگر فقط می‌خواهید کاربران را با حساب‌های Google خود وارد کنید، فقط profile و دامنه email را درخواست کنید. یا اگر می‌خواهید مجوز تماس با یک API پشتیبانی شده را از طرف کاربران درخواست کنید، دامنه‌های مورد نیاز را علاوه بر profile و دامنه email درخواست کنید.

در زیر نمونه ای از درخواست برای کد کاربری است:

POST /device/code HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded

client_id=YOUR_GOOGLE_CLIENT_ID&scope=email%20profile

استفاده از curl :

curl -d "client_id=YOUR_GOOGLE_CLIENT_ID&scope=email profile" https://oauth2.googleapis.com/device/code

پاسخ به عنوان یک شی JSON برگردانده می شود:

 {
  "device_code" : "4/4-GMMhmHCXhWEzkobqIHGG_EnNYYsAkukHspeYUk9E8",
  "user_code" : "GQVQ-JKEC",
  "verification_url" : "https://www.google.com/device",
  "expires_in" : 1800,
  "interval" : 5
}

برنامه شما مقادیر user_code و verification_url را به کاربر نمایش می‌دهد، و در همان زمان، نقطه پایان ورود به سیستم را در interval مشخص شده نظرسنجی می‌کند تا زمانی که کاربر وارد سیستم شود یا زمان مشخص شده توسط expires_in بگذرد.

نمایش کد کاربر و URL تأیید

پس از دریافت کد کاربری و URL تأیید از نقطه پایانی دستگاه، آنها را نمایش دهید و به کاربر دستور دهید URL را باز کند و کد کاربر را وارد کند.

مقادیر verification_url و user_code ممکن است تغییر کنند. رابط کاربری خود را به گونه ای طراحی کنید که بتواند محدودیت های زیر را تحمل کند:

  • user_code باید در یک فیلد به اندازه کافی گسترده نمایش داده شود تا بتواند 15 کاراکتر به اندازه W را مدیریت کند.
  • verification_url باید در فیلدی به اندازه کافی گسترده نمایش داده شود تا بتواند رشته URL 40 کاراکتری را مدیریت کند.

هر دو رشته می توانند شامل هر کاراکتر قابل چاپ از مجموعه کاراکترهای US-ASCII باشند.

وقتی رشته user_code را نمایش می‌دهید، رشته را به هیچ وجه تغییر ندهید (مانند تغییر حروف بزرگ یا وارد کردن سایر نویسه‌های قالب‌بندی)، زیرا ممکن است در صورت تغییر قالب کد در آینده، برنامه شما خراب شود.

در صورت تمایل می توانید رشته verification_url را با حذف طرح از URL برای اهداف نمایش تغییر دهید. اگر این کار را می کنید، مطمئن شوید که برنامه شما می تواند هر دو نوع "http" و "https" را مدیریت کند. در غیر این صورت رشته verification_url را تغییر ندهید.

هنگامی که کاربر به URL تأیید صحت می‌رود، صفحه‌ای شبیه به زیر می‌بیند:

یک دستگاه را با وارد کردن یک کد متصل کنید

پس از اینکه کاربر کد کاربر را وارد کرد، سایت ورود به سیستم Google صفحه رضایت مشابه زیر را نشان می دهد:

نمونه صفحه رضایت برای مشتری دستگاه

اگر کاربر روی «اجازه» کلیک کند، برنامه شما می‌تواند یک کد شناسه برای شناسایی کاربر، یک نشانه دسترسی برای فراخوانی APIهای Google، و یک نشانه بازخوانی برای دریافت نشانه‌های جدید دریافت کند.

یک رمز شناسه دریافت کنید و رمز را به روز کنید

پس از اینکه برنامه شما کد کاربر و URL تأیید را نمایش داد، نظرسنجی نقطه پایانی نشانه ( https://oauth2.googleapis.com/token ) را با کد دستگاهی که از نقطه پایانی دستگاه دریافت کرده اید، شروع کنید. نقطه پایانی نشانه را در بازه زمانی، در ثانیه، که توسط مقدار interval مشخص شده است، نظرسنجی کنید.

در زیر یک نمونه درخواست است:

POST /token HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded

client_id=YOUR_GOOGLE_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&code=DEVICE_CODE&grant_type=http://oauth.net/grant_type/device/1.0

استفاده از curl :

curl -d "client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&code=YOUR_DEVICE_CODE&grant_type=http://oauth.net/grant_type/device/1.0" https://oauth2.googleapis.com/token

اگر کاربر هنوز درخواست را تایید نکرده باشد، پاسخ به شرح زیر است:

{
  "error" : "authorization_pending"
}

برنامه شما باید این درخواست ها را با سرعتی تکرار کند که از مقدار interval تجاوز نکند. اگر برنامه شما خیلی سریع نظرسنجی کند، پاسخ به شرح زیر است:

{
  "error" : "slow_down"
}

هنگامی که کاربر وارد سیستم می‌شود و به برنامه شما اجازه دسترسی به محدوده‌های درخواستی شما را می‌دهد، پاسخ به درخواست بعدی برنامه شما شامل یک کد شناسه، یک نشانه دسترسی و یک نشانه بازخوانی است:

{
  "access_token": "ya29.AHES6ZSuY8f6WFLswSv0HZLP2J4cCvFSj-8GiZM0Pr6cgXU",
  "token_type": "Bearer",
  "expires_in": 3600,
  "refresh_token": "1/551G1yXUqgkDGnkfFk6ZbjMMMDIMxo3JFc8lY8CAR-Q",
  "id_token": "eyJhbGciOiJSUzI..."
}

پس از دریافت این پاسخ، برنامه شما می‌تواند کد شناسه را رمزگشایی کند تا اطلاعات نمایه اولیه کاربر واردشده را دریافت کند، یا رمز شناسایی را به سرور پشتیبان برنامه شما ارسال کند تا به طور ایمن با سرور احراز هویت شود. همچنین، برنامه شما می‌تواند از رمز دسترسی برای تماس با APIهای Google که کاربر مجاز کرده است استفاده کند.

شناسه و نشانه های دسترسی طول عمر محدودی دارند. برای اینکه کاربر بیش از طول عمر توکن‌ها به سیستم وارد شود، رمز تازه‌سازی را ذخیره کنید و از آن برای درخواست توکن‌های جدید استفاده کنید.

اطلاعات پروفایل کاربر را از شناسه شناسه دریافت کنید

می‌توانید با رمزگشایی کد شناسه با هر کتابخانه رمزگشایی JWT، اطلاعات نمایه کاربر وارد شده را دریافت کنید. به عنوان مثال، با استفاده از کتابخانه جاوا اسکریپت jwt-decode Auth0:

var user_profile = jwt_decode(<var>id_token</var>);

// The "sub" field is available on all ID tokens. This value is unique for each
// Google account and can be used to identify the user. (But do not send this
// value to your server; instead, send the whole ID token so its authenticity
// can be verified.)
var user_id = user_profile["sub"];

// These values are available when you request the "profile" and "email" scopes.
var user_email = user_profile["email"];
var email_verified = user_profile["email_verified"];
var user_name = user_profile["name"];
var user_photo_url = user_profile["picture"];
var user_given_name = user_profile["given_name"];
var user_family_name = user_profile["family_name"];
var user_locale = user_profile["locale"];

اطلاعات بیشتر