میتوانید به کاربران اجازه دهید با حسابهای Google خود در دستگاههایی با قابلیت ورودی محدود، مانند تلویزیونهای متصل به اینترنت، وارد برنامه شما شوند.
این برنامه یک کد کوتاه و URL ورود به سیستم را به کاربر نمایش می دهد. سپس، کاربر URL ورود به سیستم را در یک مرورگر وب باز می کند، کد را وارد می کند و به برنامه اجازه دسترسی به اطلاعات ورود به سیستم کاربر را می دهد. در نهایت برنامه تاییدیه دریافت می کند و کاربر وارد سیستم می شود.
برای استفاده از این جریان ورود به سیستم، برنامه باید روی دستگاهی اجرا شود که معیارهای زیر را داشته باشد:
- دستگاه باید بتواند یک URL 40 نویسه ای و یک کد کاربری 15 نویسه ای را به همراه دستورالعمل هایی برای کاربر نمایش دهد.
- دستگاه باید به اینترنت متصل باشد.
شناسه مشتری و راز مشتری دریافت کنید
برنامه شما به شناسه سرویس گیرنده OAuth 2.0 و راز سرویس گیرنده نیاز دارد تا به نقاط پایانی ورود به سیستم Google درخواست دهد.
برای پیدا کردن شناسه مشتری و رمز مشتری پروژه خود، موارد زیر را انجام دهید:
- یک اعتبارنامه OAuth 2.0 موجود را انتخاب کنید یا صفحه اعتبارنامه ها را باز کنید.
- اگر قبلاً این کار را انجام نداده اید، اعتبارنامه OAuth 2.0 پروژه خود را با کلیک کردن روی ایجاد اعتبار > شناسه مشتری OAuth و ارائه اطلاعات مورد نیاز برای ایجاد اعتبارنامه ایجاد کنید.
- به دنبال شناسه مشتری در بخش شناسه های مشتری 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=CLIENT_ID&scope=email%20profile
استفاده از curl
:
curl -d "client_id=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
را نمایش میدهید، رشته را به هیچ وجه تغییر ندهید (مانند تغییر حروف بزرگ یا وارد کردن سایر نویسههای قالببندی)، زیرا ممکن است در صورت تغییر قالب کد در آینده، برنامه شما خراب شود.
در صورت تمایل میتوانید با حذف طرح از URL برای اهداف نمایش، رشته verification_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=CLIENT_ID&client_secret=CLIENT_SECRET&code=DEVICE_CODE&grant_type=http://oauth.net/grant_type/device/1.0
استفاده از curl
:
curl -d "client_id=CLIENT_ID&client_secret=CLIENT_SECRET&code=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(id_token); // 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"];
اطلاعات بیشتر
- برای اینکه کاربران بیش از طول عمر یک نشانه شناسه وارد سیستم شوند، به بازخوانی نشانه دسترسی مراجعه کنید.
- اگر نیاز به احراز هویت با یک سرور باطن دارید، برای اطلاعات در مورد انجام ایمن این کار، احراز هویت با سرور باطن را ببینید.