این سند نحوه پیادهسازی مجوز OAuth 2.0 برای دسترسی به APIهای گوگل از طریق برنامههایی که روی دستگاههایی مانند تلویزیون، کنسولهای بازی و چاپگرها اجرا میشوند را توضیح میدهد. به طور خاص، این جریان برای دستگاههایی طراحی شده است که یا به مرورگر دسترسی ندارند یا قابلیتهای ورودی محدودی دارند.
OAuth 2.0 به کاربران اجازه میدهد دادههای خاصی را با یک برنامه به اشتراک بگذارند، در حالی که نام کاربری، رمز عبور و سایر اطلاعات آنها خصوصی باقی میماند. به عنوان مثال، یک برنامه تلویزیونی میتواند از OAuth 2.0 برای دریافت مجوز انتخاب یک فایل ذخیره شده در Google Drive استفاده کند.
از آنجایی که برنامههایی که از این جریان استفاده میکنند، در دستگاههای جداگانه توزیع میشوند، فرض بر این است که برنامهها نمیتوانند اسرار را حفظ کنند. آنها میتوانند در حالی که کاربر در برنامه حضور دارد یا وقتی برنامه در پسزمینه اجرا میشود، به APIهای گوگل دسترسی داشته باشند.
جایگزینها
اگر در حال نوشتن برنامهای برای پلتفرمی مانند اندروید، iOS، macOS، لینوکس یا ویندوز (از جمله پلتفرم جهانی ویندوز) هستید که به مرورگر و قابلیتهای ورودی کامل دسترسی دارد، از جریان OAuth 2.0 برای برنامههای موبایل و دسکتاپ استفاده کنید. (حتی اگر برنامه شما یک ابزار خط فرمان بدون رابط گرافیکی باشد، باید از این جریان استفاده کنید.)
اگر فقط میخواهید کاربران را با حسابهای گوگلشان وارد سیستم کنید و از توکن JWT ID برای دریافت اطلاعات اولیه پروفایل کاربر استفاده کنید، به بخش ورود به سیستم در تلویزیونها و دستگاههای ورودی محدود مراجعه کنید.
پیشنیازها
فعال کردن APIها برای پروژه شما
هر برنامهای که APIهای گوگل را فراخوانی میکند، باید آن APIها را در ... فعال کند. API Console.
برای فعال کردن API برای پروژه خود:
- Open the API Library در Google API Console.
- If prompted, select a project, or create a new one.
- API Library تمام APIهای موجود را که بر اساس خانواده محصول و محبوبیت گروهبندی شدهاند، فهرست میکند. اگر API مورد نظر برای فعالسازی در لیست قابل مشاهده نیست، از جستجو برای یافتن آن استفاده کنید یا روی مشاهده همه در خانواده محصولی که به آن تعلق دارد کلیک کنید.
- API مورد نظر خود را انتخاب کنید و سپس روی دکمهی فعالسازی کلیک کنید.
- If prompted, enable billing.
- If prompted, read and accept the API's Terms of Service.
ایجاد اعتبارنامههای مجوز
هر برنامهای که از OAuth 2.0 برای دسترسی به APIهای گوگل استفاده میکند، باید دارای اعتبارنامههای احراز هویت باشد که برنامه را به سرور OAuth 2.0 گوگل معرفی کند. مراحل زیر نحوه ایجاد اعتبارنامه برای پروژه شما را توضیح میدهد. سپس برنامههای شما میتوانند از این اعتبارنامهها برای دسترسی به APIهایی که برای آن پروژه فعال کردهاید، استفاده کنند.
- Go to the Clients page.
- روی ایجاد کلاینت کلیک کنید.
- نوع برنامه تلویزیونها و دستگاههای ورودی محدود را انتخاب کنید.
- نام کلاینت OAuth 2.0 خود را وارد کنید و روی Create کلیک کنید.
شناسایی محدودههای دسترسی
محدودهها به برنامه شما این امکان را میدهند که فقط به منابعی که نیاز دارد درخواست دسترسی کند و در عین حال کاربران را قادر میسازد میزان دسترسی که به برنامه شما میدهند را کنترل کنند. بنابراین، ممکن است رابطه معکوسی بین تعداد محدودههای درخواستی و احتمال کسب رضایت کاربر وجود داشته باشد.
قبل از شروع پیادهسازی احراز هویت OAuth 2.0، توصیه میکنیم محدودههایی را که برنامه شما برای دسترسی به آنها نیاز به مجوز دارد، شناسایی کنید.
برای برنامهها یا دستگاههای نصبشده، به فهرست محدودههای مجاز مراجعه کنید.
دریافت توکنهای دسترسی OAuth 2.0
حتی اگر برنامه شما روی دستگاهی با قابلیتهای ورودی محدود اجرا شود، کاربران باید دسترسی جداگانهای به دستگاهی با قابلیتهای ورودی غنیتر داشته باشند تا این جریان مجوزدهی تکمیل شود. این جریان مراحل زیر را دارد:
- برنامه شما درخواستی را به سرور تأیید گوگل ارسال میکند که محدودههایی را که برنامه شما برای دسترسی به آنها درخواست مجوز خواهد کرد، مشخص میکند.
- سرور با چندین قطعه اطلاعات که در مراحل بعدی استفاده میشوند، مانند کد دستگاه و کد کاربر، پاسخ میدهد.
- شما اطلاعاتی را نمایش میدهید که کاربر میتواند برای تأیید برنامه شما، آن را در یک دستگاه جداگانه وارد کند.
- برنامه شما شروع به نظرسنجی از سرور تأیید گوگل میکند تا مشخص شود که آیا کاربر برنامه شما را تأیید کرده است یا خیر.
- کاربر به دستگاهی با قابلیتهای ورودی غنیتر سوئیچ میکند، یک مرورگر وب را باز میکند، به URL نمایش داده شده در مرحله ۳ میرود و کدی را که در مرحله ۳ نیز نمایش داده شده است وارد میکند. سپس کاربر میتواند به برنامه شما دسترسی بدهد (یا آن را رد کند).
- پاسخ بعدی به درخواست نظرسنجی شما حاوی توکنهایی است که برنامه شما برای تأیید درخواستها از طرف کاربر به آنها نیاز دارد. (اگر کاربر از دسترسی به برنامه شما خودداری کرده باشد، پاسخ حاوی توکنها نیست.)
تصویر زیر این فرآیند را نشان میدهد:

بخشهای بعدی این مراحل را با جزئیات توضیح میدهند. با توجه به طیف وسیعی از قابلیتها و محیطهای زمان اجرا که دستگاهها ممکن است داشته باشند، مثالهای نشان داده شده در این سند از ابزار خط فرمان curl استفاده میکنند. این مثالها باید به راحتی به زبانها و زمانهای اجرا مختلف قابل انتقال باشند.
مرحله ۱: درخواست کدهای دستگاه و کاربر
در این مرحله، دستگاه شما یک درخواست HTTP POST به سرور احراز هویت گوگل، به آدرس https://oauth2.googleapis.com/device/code ارسال میکند که برنامه شما و همچنین محدودههای دسترسی که برنامه شما میخواهد از طرف کاربر به آنها دسترسی داشته باشد را شناسایی میکند. شما باید این URL را از سند Discovery با استفاده از مقدار فراداده device_authorization_endpoint بازیابی کنید. پارامترهای درخواست HTTP زیر را وارد کنید:
| پارامترها | |
|---|---|
client_id | مورد نیاز شناسه کلاینت برای برنامه شما. میتوانید این مقدار را در Cloud ConsoleClients page. |
scope | مورد نیاز فهرستی از محدودهها که با فاصله از هم جدا شدهاند و منابعی را که برنامه شما میتواند از طرف کاربر به آنها دسترسی داشته باشد، مشخص میکنند. این مقادیر، صفحه رضایتنامهای را که گوگل به کاربر نمایش میدهد، مشخص میکنند. برای برنامهها یا دستگاههای نصبشده، به فهرست محدودههای مجاز مراجعه کنید. محدودهها به برنامه شما این امکان را میدهند که فقط به منابعی که نیاز دارد درخواست دسترسی کند و در عین حال کاربران را قادر میسازد میزان دسترسی که به برنامه شما میدهند را کنترل کنند. بنابراین، بین تعداد محدودههای درخواستی و احتمال کسب رضایت کاربر، رابطه معکوس وجود دارد. |
مثالها
قطعه کد زیر یک نمونه درخواست را نشان میدهد:
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%20profile" \
https://oauth2.googleapis.com/device/code
مرحله ۲: مدیریت پاسخ سرور احراز هویت
سرور احراز هویت یکی از پاسخهای زیر را برمیگرداند:
پاسخ موفقیت
اگر درخواست معتبر باشد، پاسخ شما یک شیء JSON شامل ویژگیهای زیر خواهد بود:
| خواص | |
|---|---|
device_code | مقداری که گوگل به طور منحصر به فرد برای شناسایی دستگاهی که برنامه درخواست مجوز را اجرا میکند، اختصاص میدهد. کاربر آن دستگاه را از دستگاه دیگری با قابلیتهای ورودی غنیتر تأیید میکند. به عنوان مثال، یک کاربر ممکن است از یک لپتاپ یا تلفن همراه برای تأیید برنامهای که روی تلویزیون اجرا میشود استفاده کند. در این حالت، device_code تلویزیون را شناسایی میکند.این کد به دستگاهی که برنامه را اجرا میکند اجازه میدهد تا به طور ایمن تشخیص دهد که آیا کاربر دسترسی را اعطا کرده یا رد کرده است. |
expires_in | مدت زمانی (برحسب ثانیه) که device_code و user_code معتبر هستند. اگر در این مدت، کاربر جریان مجوز را تکمیل نکند و دستگاه شما نیز برای بازیابی اطلاعات مربوط به تصمیم کاربر، نظرسنجی انجام ندهد، ممکن است لازم باشد این فرآیند را از مرحله ۱ مجدداً راهاندازی کنید. |
interval | مدت زمانی (برحسب ثانیه) که دستگاه شما باید بین درخواستهای نظرسنجی منتظر بماند. برای مثال، اگر مقدار 5 باشد، دستگاه شما باید هر پنج ثانیه یک درخواست نظرسنجی به سرور تأیید گوگل ارسال کند. برای جزئیات بیشتر به مرحله ۳ مراجعه کنید. |
user_code | یک مقدار حساس به حروف بزرگ و کوچک که به گوگل محدودههایی را که برنامه درخواست دسترسی به آنها را دارد، مشخص میکند. رابط کاربری شما به کاربر دستور میدهد که این مقدار را در یک دستگاه جداگانه با قابلیتهای ورودی غنیتر وارد کند. سپس گوگل از این مقدار برای نمایش مجموعه صحیح محدودهها هنگام درخواست دسترسی کاربر به برنامه شما استفاده میکند. |
verification_url | یک URL که کاربر باید در یک دستگاه جداگانه به آن مراجعه کند تا user_code وارد کند و دسترسی به برنامه شما را اعطا یا رد کند. رابط کاربری شما نیز این مقدار را نمایش میدهد. |
قطعه کد زیر یک نمونه پاسخ را نشان میدهد:
{ "device_code": "4/4-GMMhmHCXhWEzkobqIHGG_EnNYYsAkukHspeYUk9E8", "user_code": "GQVQ-JKEC", "verification_url": "https://www.google.com/device", "expires_in": 1800, "interval": 5 }
سهمیه پاسخ از حد مجاز فراتر رفت
اگر درخواستهای کد دستگاه شما از سهمیه مرتبط با شناسه کلاینت شما فراتر رفته باشد، پاسخ ۴۰۳ حاوی خطای زیر دریافت خواهید کرد:
{ "error_code": "rate_limit_exceeded" }
در این صورت، از یک استراتژی بکآف برای کاهش نرخ درخواستها استفاده کنید.
مرحله ۳: نمایش کد کاربر
مقادیر verification_url و user_code که در مرحله ۲ به دست آمدهاند را به کاربر نمایش دهید. هر دو مقدار میتوانند شامل هر کاراکتر قابل چاپ از مجموعه کاراکترهای US-ASCII باشند. محتوایی که به کاربر نمایش میدهید باید به کاربر دستور دهد که در یک دستگاه جداگانه به verification_url برود و user_code وارد کند.
رابط کاربری (UI) خود را با در نظر گرفتن قوانین زیر طراحی کنید:
-
user_code-
user_codeباید در فیلدی نمایش داده شود که بتواند ۱۵ کاراکتر با اندازه 'W' را پشتیبانی کند. به عبارت دیگر، اگر بتوانید کدWWWWWWWWWWWWWWWرا به درستی نمایش دهید، رابط کاربری شما معتبر است و توصیه میکنیم هنگام آزمایش نحوه نمایشuser_codeدر رابط کاربری خود، از این مقدار رشتهای استفاده کنید. - کد
user_codeبه حروف بزرگ و کوچک حساس است و نباید به هیچ وجه تغییر کند، مانند تغییر حروف بزرگ و کوچک یا وارد کردن سایر کاراکترهای قالببندی.
-
-
verification_url- فضایی که
verification_urlرا نمایش میدهید باید به اندازه کافی عریض باشد تا بتواند یک رشته URL با طول ۴۰ کاراکتر را در خود جای دهد. - شما نباید به هیچ وجه
verification_urlتغییر دهید، مگر اینکه بخواهید طرح نمایش را به صورت اختیاری حذف کنید. اگر قصد دارید طرح (مثلاًhttps://) را به دلایل نمایشی از URL حذف کنید، مطمئن شوید که برنامه شما میتواند هر دو نوعhttpوhttpsرا پشتیبانی کند.
- فضایی که
مرحله ۴: از سرور احراز هویت گوگل نظرسنجی کنید
از آنجایی که کاربر از یک دستگاه جداگانه برای پیمایش به verification_url و اعطای (یا رد) دسترسی استفاده میکند، دستگاه درخواستکننده به طور خودکار از پاسخ کاربر به درخواست دسترسی مطلع نمیشود. به همین دلیل، دستگاه درخواستکننده باید از سرور مجوز گوگل نظرسنجی کند تا مشخص شود کاربر چه زمانی به درخواست پاسخ داده است.
دستگاه درخواستکننده باید ارسال درخواستهای نظرسنجی را تا زمانی که پاسخی مبنی بر پاسخ کاربر به درخواست دسترسی یا تا زمانی که device_code و user_code بهدستآمده در مرحله ۲ منقضی شوند، دریافت کند، ادامه دهد. interval برگرداندهشده در مرحله ۲، مدت زمان انتظار بین درخواستها را بر حسب ثانیه مشخص میکند.
آدرس اینترنتی (URL) نقطه پایانی برای نظرسنجی، https://oauth2.googleapis.com/token است. درخواست نظرسنجی شامل پارامترهای زیر است:
| پارامترها | |
|---|---|
client_id | شناسه کلاینت برای برنامه شما. میتوانید این مقدار را در Cloud ConsoleClients page. |
client_secret | رمز کلاینت برای client_id ارائه شده. میتوانید این مقدار را در Cloud ConsoleClients page. |
device_code | device_code توسط سرور تأیید در مرحله 2 برگردانده شده است. |
grant_type | این مقدار را روی urn:ietf:params:oauth:grant-type:device_code تنظیم کنید. |
مثالها
قطعه کد زیر یک نمونه درخواست را نشان میدهد:
POST /token HTTP/1.1 Host: oauth2.googleapis.com Content-Type: application/x-www-form-urlencoded client_id=client_id& client_secret=client_secret& device_code=device_code& grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Adevice_code
این مثال یک دستور curl را برای ارسال همان درخواست نشان میدهد:
curl -d "client_id=client_id&client_secret=client_secret& \
device_code=device_code& \
grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Adevice_code" \
-H "Content-Type: application/x-www-form-urlencoded" \
https://oauth2.googleapis.com/tokenمرحله ۵: کاربر به درخواست دسترسی پاسخ میدهد
تصویر زیر صفحهای مشابه آنچه کاربران هنگام مراجعه به verification_url که در مرحله ۳ نمایش دادید، میبینند را نشان میدهد:

پس از وارد کردن user_code و اگر قبلاً وارد سیستم نشدهاید، وارد گوگل شوید، کاربر صفحه رضایتنامهای مانند تصویر زیر را مشاهده میکند:

مرحله 6: رسیدگی به پاسخهای درخواستهای نظرسنجی
سرور احراز هویت گوگل به هر درخواست نظرسنجی با یکی از پاسخهای زیر پاسخ میدهد:
دسترسی اعطا شد
اگر کاربر (با کلیک روی Allow در صفحه رضایتنامه) به دستگاه دسترسی داده باشد، پاسخ شامل یک توکن دسترسی و یک توکن بهروزرسانی است. این توکنها دستگاه شما را قادر میسازند تا از طرف کاربر به APIهای گوگل دسترسی داشته باشد . (ویژگی scope در پاسخ تعیین میکند که دستگاه به کدام APIها میتواند دسترسی داشته باشد.)
در این حالت، پاسخ API شامل فیلدهای زیر است:
| فیلدها | |
|---|---|
access_token | توکنی که برنامه شما برای تأیید درخواست API گوگل ارسال میکند. |
expires_in | طول عمر باقی مانده از توکن دسترسی بر حسب ثانیه. |
refresh_token | توکنی که میتوانید از آن برای دریافت یک توکن دسترسی جدید استفاده کنید. توکنهای تازهسازی تا زمانی که کاربر دسترسی را لغو کند یا توکن تازهسازی منقضی شود، معتبر هستند. توجه داشته باشید که توکنهای تازهسازی همیشه برای دستگاهها بازگردانده میشوند. |
refresh_token_expires_in | طول عمر باقیماندهی توکن بهروزرسانی بر حسب ثانیه. این مقدار فقط زمانی تنظیم میشود که کاربر دسترسی مبتنی بر زمان را اعطا کند. |
scope | دامنههای دسترسی اعطا شده توسط access_token به صورت فهرستی از رشتههای جدا شده با فاصله و حساس به حروف بزرگ و کوچک بیان میشوند. |
token_type | نوع توکن برگشتی. در حال حاضر، مقدار این فیلد همیشه روی Bearer تنظیم میشود. |
قطعه کد زیر یک نمونه پاسخ را نشان میدهد:
{ "access_token": "1/fFAGRNJru1FTz70BzhT3Zg", "expires_in": 3920, "scope": "openid https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email", "token_type": "Bearer", "refresh_token": "1/xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI" }
توکنهای دسترسی طول عمر محدودی دارند. اگر برنامه شما نیاز به دسترسی به یک API برای مدت طولانی داشته باشد، میتواند از توکن بهروزرسانی برای دریافت یک توکن دسترسی جدید استفاده کند . اگر برنامه شما به این نوع دسترسی نیاز دارد، باید توکن بهروزرسانی را برای استفادههای بعدی ذخیره کند.
دسترسی رد شد
اگر کاربر از اعطای دسترسی به دستگاه خودداری کند، پاسخ سرور دارای کد وضعیت پاسخ HTTP 403 ( Forbidden ) است. پاسخ حاوی خطای زیر است:
{ "error": "access_denied", "error_description": "Forbidden" }
مجوز در انتظار
اگر کاربر هنوز جریان احراز هویت را تکمیل نکرده باشد، سرور کد وضعیت پاسخ HTTP 428 ( Precondition Required ) را برمیگرداند. پاسخ حاوی خطای زیر است:
{ "error": "authorization_pending", "error_description": "Precondition Required" }
نظرسنجی بیش از حد مکرر
اگر دستگاه درخواستهای نظرسنجی را بیش از حد مکرر ارسال کند، سرور کد وضعیت پاسخ HTTP 403 ( Forbidden ) را برمیگرداند. پاسخ حاوی خطای زیر است:
{ "error": "slow_down", "error_description": "Forbidden" }
خطاهای دیگر
سرور احراز هویت همچنین در صورتی که درخواست نظرسنجی فاقد پارامترهای مورد نیاز باشد یا مقدار پارامتر نادرستی داشته باشد، خطا برمیگرداند. این درخواستها معمولاً دارای کد وضعیت پاسخ HTTP 400 ( Bad Request ) یا 401 ( Unauthorized ) هستند. این خطاها عبارتند از:
| خطا | کد وضعیت HTTP | توضیحات |
|---|---|---|
admin_policy_enforced | 400 | حساب گوگل به دلیل سیاستهای مدیر Google Workspace خود قادر به تأیید یک یا چند محدوده درخواستی نیست. برای اطلاعات بیشتر در مورد اینکه چگونه یک مدیر میتواند دسترسی به محدودهها را تا زمانی که دسترسی به طور صریح به شناسه کلاینت OAuth شما اعطا نشده است، محدود کند، به مقاله راهنمای مدیریت Google Workspace با عنوان «کنترل دسترسی برنامههای شخص ثالث و داخلی به دادههای Google Workspace» مراجعه کنید. |
invalid_client | 401 | کلاینت OAuth پیدا نشد. برای مثال، اگر مقدار پارامتر نوع کلاینت OAuth نادرست است. مطمئن شوید که نوع برنامه برای شناسه کلاینت روی TVs and Limited Input devices تنظیم شده باشد. |
invalid_grant | 400 | مقدار پارامتر code نامعتبر است، قبلاً درخواست شده است یا قابل تجزیه نیست. |
unsupported_grant_type | 400 | مقدار پارامتر grant_type نامعتبر است. |
org_internal | 403 | شناسه کلاینت OAuth در درخواست، بخشی از پروژهای است که دسترسی به حسابهای گوگل را در یک سازمان ابری خاص گوگل محدود میکند. پیکربندی نوع کاربر را برای برنامه OAuth خود تأیید کنید. |
فراخوانی API های گوگل
پس از اینکه برنامه شما یک توکن دسترسی دریافت کرد، میتوانید از این توکن برای برقراری تماس با یک API گوگل از طرف یک حساب کاربری مشخص استفاده کنید، البته اگر محدوده(های) دسترسی مورد نیاز API اعطا شده باشد. برای انجام این کار، توکن دسترسی را با وارد کردن پارامتر پرسوجوی access_token یا مقدار Bearer هدر HTTP Authorization ، در درخواست به API قرار دهید. در صورت امکان، هدر HTTP ترجیح داده میشود، زیرا رشتههای پرسوجو معمولاً در گزارشهای سرور قابل مشاهده هستند. در بیشتر موارد، میتوانید از یک کتابخانه کلاینت برای تنظیم تماسهای خود با APIهای گوگل استفاده کنید (برای مثال، هنگام فراخوانی API فایلهای درایو ).
شما میتوانید تمام APIهای گوگل را امتحان کنید و حوزههای کاربرد آنها را در OAuth 2.0 Playground مشاهده کنید.
مثالهای HTTP GET
فراخوانی نقطه پایانی drive.files (رابط برنامهنویسی کاربردی Drive Files) با استفاده از هدر HTTP مربوط به Authorization: Bearer ممکن است چیزی شبیه به شکل زیر باشد. توجه داشته باشید که باید توکن دسترسی خودتان را مشخص کنید:
GET /drive/v2/files HTTP/1.1 Host: www.googleapis.com Authorization: Bearer access_token
در اینجا فراخوانی همان API برای کاربر احراز هویت شده با استفاده از پارامتر رشته پرس و جوی access_token مشاهده میکنید:
GET https://www.googleapis.com/drive/v2/files?access_token=access_token
مثالهای curl
میتوانید این دستورات را با برنامه خط فرمان curl آزمایش کنید. در اینجا مثالی آورده شده است که از گزینه هدر HTTP (ترجیحاً) استفاده میکند:
curl -H "Authorization: Bearer access_token" https://www.googleapis.com/drive/v2/files
یا، به طور جایگزین، گزینه پارامتر رشته پرس و جو:
curl https://www.googleapis.com/drive/v2/files?access_token=access_token
بهروزرسانی یک توکن دسترسی
توکنهای دسترسی به صورت دورهای منقضی میشوند و برای یک درخواست API مرتبط، اعتبارنامههای نامعتبر میشوند. اگر درخواست دسترسی آفلاین به حوزههای مرتبط با توکن را داشته باشید، میتوانید بدون درخواست اجازه از کاربر (از جمله زمانی که کاربر حضور ندارد) توکن دسترسی را بهروزرسانی کنید.
برای بهروزرسانی یک توکن دسترسی، برنامه شما یک درخواست HTTPS POST به سرور احراز هویت گوگل ( https://oauth2.googleapis.com/token ) ارسال میکند که شامل پارامترهای زیر است:
| فیلدها | |
|---|---|
client_id | شناسه کلاینت به دست آمده از API Console. |
client_secret | اختیاری راز مشتری که از ... به دست آمده است API Console. |
grant_type | همانطور که در مشخصات OAuth 2.0 تعریف شده است ، مقدار این فیلد باید برابر با refresh_token تنظیم شود. |
refresh_token | توکن بهروزرسانی که از تبادل کد مجوز بازگردانده شده است. |
قطعه کد زیر یک نمونه درخواست را نشان میدهد:
POST /token HTTP/1.1 Host: oauth2.googleapis.com Content-Type: application/x-www-form-urlencoded client_id=your_client_id& refresh_token=refresh_token& grant_type=refresh_token
تا زمانی که کاربر دسترسی اعطا شده به برنامه را لغو نکرده باشد، سرور توکن یک شیء JSON را که حاوی یک توکن دسترسی جدید است، برمیگرداند. قطعه کد زیر یک نمونه پاسخ را نشان میدهد:
{ "access_token": "1/fFAGRNJru1FTz70BzhT3Zg", "expires_in": 3920, "scope": "https://www.googleapis.com/auth/drive.metadata.readonly https://www.googleapis.com/auth/calendar.readonly", "token_type": "Bearer" }
توجه داشته باشید که محدودیتهایی در تعداد توکنهای بهروزرسانی که صادر میشوند وجود دارد؛ یک محدودیت برای هر ترکیب کلاینت/کاربر، و محدودیت دیگر برای هر کاربر در تمام کلاینتها. شما باید توکنهای بهروزرسانی را در حافظه بلندمدت ذخیره کنید و تا زمانی که معتبر هستند، به استفاده از آنها ادامه دهید. اگر برنامه شما توکنهای بهروزرسانی زیادی درخواست کند، ممکن است با این محدودیتها مواجه شود، که در این صورت توکنهای بهروزرسانی قدیمیتر از کار میافتند.
ابطال توکن
در برخی موارد، کاربر ممکن است بخواهد دسترسی داده شده به یک برنامه را لغو کند. کاربر میتواند با مراجعه به تنظیمات حساب ، دسترسی را لغو کند. برای اطلاعات بیشتر، به بخش «حذف دسترسی سایت یا برنامه» در سند پشتیبانی سایتها و برنامههای شخص ثالث با دسترسی به حساب شما مراجعه کنید.
همچنین ممکن است یک برنامه به صورت برنامهنویسیشده دسترسیهای دادهشده به خود را لغو کند. لغو برنامهریزیشده در مواردی که کاربر اشتراک خود را لغو میکند، برنامه را حذف میکند یا منابع API مورد نیاز یک برنامه بهطور قابلتوجهی تغییر کرده است، مهم است. به عبارت دیگر، بخشی از فرآیند حذف میتواند شامل یک درخواست API باشد تا اطمینان حاصل شود که مجوزهایی که قبلاً به برنامه اعطا شده است، حذف میشوند.
برای لغو یک توکن از طریق برنامهنویسی، برنامه شما درخواستی به https://oauth2.googleapis.com/revoke ارسال میکند و توکن را به عنوان پارامتر وارد میکند:
curl -d -X -POST --header "Content-type:application/x-www-form-urlencoded" \
https://oauth2.googleapis.com/revoke?token={token}این توکن میتواند یک توکن دسترسی یا یک توکن بهروزرسانی باشد. اگر توکن، توکن دسترسی باشد و یک توکن بهروزرسانی متناظر داشته باشد، توکن بهروزرسانی نیز لغو خواهد شد.
اگر ابطال با موفقیت پردازش شود، کد وضعیت HTTP پاسخ 200 است. برای شرایط خطا، کد وضعیت HTTP 400 به همراه یک کد خطا بازگردانده میشود.
محدودههای مجاز
جریان OAuth 2.0 برای دستگاهها فقط برای محدودههای زیر پشتیبانی میشود:
اتصال OpenID ، ورود به سیستم گوگل
-
email -
openid -
profile
درایو API
-
https://www.googleapis.com/auth/drive.appdata -
https://www.googleapis.com/auth/drive.file
رابط برنامهنویسی کاربردی یوتیوب
-
https://www.googleapis.com/auth/youtube -
https://www.googleapis.com/auth/youtube.readonly
دسترسی مبتنی بر زمان
دسترسی مبتنی بر زمان به کاربر اجازه میدهد تا برای تکمیل یک اقدام، به برنامه شما دسترسی به دادههای خود را برای مدت محدودی اعطا کند. دسترسی مبتنی بر زمان در محصولات منتخب گوگل در طول جریان رضایت در دسترس است و به کاربران این امکان را میدهد که برای مدت زمان محدودی به دادهها دسترسی بدهند. به عنوان مثال، رابط برنامهنویسی کاربردی (API) قابلیت انتقال دادهها (Data Portability API) امکان انتقال یکباره دادهها را فراهم میکند.
وقتی کاربری به برنامه شما دسترسی مبتنی بر زمان میدهد، توکن بهروزرسانی پس از مدت زمان مشخصشده منقضی میشود. توجه داشته باشید که توکنهای بهروزرسانی ممکن است تحت شرایط خاص زودتر نامعتبر شوند؛ برای جزئیات بیشتر به این موارد مراجعه کنید. فیلد refresh_token_expires_in که در پاسخ تبادل کد مجوز برگردانده میشود، نشان دهنده زمان باقیمانده تا انقضای توکن بهروزرسانی در چنین مواردی است.
پیادهسازی حفاظت از حسابهای کاربری متقابل
گام دیگری که باید برای محافظت از حسابهای کاربران خود بردارید، پیادهسازی محافظت بین حسابهای کاربری با استفاده از سرویس محافظت بین حسابهای کاربری گوگل است. این سرویس به شما امکان میدهد در اعلانهای رویدادهای امنیتی مشترک شوید که اطلاعاتی در مورد تغییرات عمده در حساب کاربری به برنامه شما ارائه میدهند. سپس میتوانید بسته به نحوه واکنش خود به رویدادها، از این اطلاعات برای انجام اقدامات لازم استفاده کنید.
برخی از نمونههای انواع رویدادهایی که توسط سرویس حفاظت از حسابهای کاربری متقابل گوگل به برنامه شما ارسال میشوند عبارتند از:
-
https://schemas.openid.net/secevent/risc/event-type/sessions-revoked -
https://schemas.openid.net/secevent/oauth/event-type/token-revoked -
https://schemas.openid.net/secevent/risc/event-type/account-disabled
برای اطلاعات بیشتر در مورد نحوه پیادهسازی محافظت از حسابهای کاربری بینحسابی و فهرست کامل رویدادهای موجود، به صفحه «محافظت از حسابهای کاربری با محافظت از حسابهای کاربری بینحسابی» مراجعه کنید.