OAuth 2.0 برای برنامه‌های تلفن همراه و رایانه

این سند توضیح می‌دهد که برنامه‌های نصب‌شده در دستگاه‌هایی مانند تلفن، رایانه لوحی، و رایانه چگونه از نقاط پایانی OAuth 2.0 در Google برای مجاز کردن دسترسی به YouTube Analytics API یا YouTube Reporting API استفاده می‌کنند.

‫OAuth 2.0 به کاربران اجازه می‌دهد داده‌های خاصی را با برنامه هم‌رسانی کنند و درعین‌حال نام‌های کاربری، گذرواژه‌ها، و سایر اطلاعات خود را خصوصی نگه دارند. برای مثال، یک برنامه می‌تواند از OAuth 2.0 برای دریافت اجازه برای بازیابی داده‌های YouTube Analytics یک کانال استفاده کند.

برنامه‌های نصب‌شده در دستگاه‌های جداگانه توزیع می‌شوند و فرض بر این است که این برنامه‌ها نمی‌توانند اسرار را حفظ کنند. این برنامه‌ها می‌توانند وقتی کاربر در برنامه حضور دارد یا وقتی برنامه در پس‌زمینه اجرا می‌شود به Google APIs دسترسی داشته باشند.

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

کتابخانه‌ها و نمونه‌ها

برای برنامه‌های iOS، توصیه می‌کنیم از جدیدترین نسخه کیت توسعه نرم‌افزار iOS «ورود به سیستم با Google» استفاده کنید. «کیت توسعه نرم‌افزار» مدیریت مجوز کاربر را انجام می‌دهد و پیاده‌سازی آن نسبت‌به پروتکل سطح پایین که در این راهنما توضیح داده شده است ساده‌تر است.

برای برنامه‌هایی که در دستگاه‌هایی اجرا می‌شوند که از مرورگر سیستم پشتیبانی نمی‌کنند یا قابلیت‌های ورودی محدودی دارند، مانند تلویزیون‌ها، کنسول‌های بازی، دوربین‌ها، یا چاپگرها، به OAuth 2.0 برای تلویزیون‌ها و دستگاه‌ها یا ورود به سیستم در تلویزیون‌ها و دستگاه‌های ورودی محدود مراجعه کنید.

پیش‌نیازها

فعال کردن میاناهای برنامه‌سازی کاربردی برای پروژه

هر برنامه‌ای که میاناهای برنامه‌سازی کاربردی Google را فراخوانی می‌کند باید آن میاناهای برنامه‌سازی کاربردی را در «کنسول میانای برنامه‌سازی کاربردی» فعال کند.

برای فعال کردن میانای برنامه‌سازی کاربردی برای پروژه‌تان:

  1. در «کنسول Google API»، کتابخانه API را باز کنید.
  2. اگر درخواست شد، پروژه‌ای را انتخاب کنید یا پروژه جدیدی ایجاد کنید.
  3. از صفحه «کتابخانه» برای پیدا کردن و فعال کردن YouTube Analytics API و YouTube Reporting API استفاده کنید. بسیاری از برنامه‌هایی که داده‌های YouTube Analytics را بازیابی می‌کنند با YouTube Data API نیز ارتباط برقرار می‌کنند. هر API دیگری را که برنامه‌تان استفاده خواهد کرد پیدا کنید و آن‌ها را نیز فعال کنید.

ایجاد اعتبارنامه‌های مجوز

هر برنامه‌ای که از OAuth 2.0 برای دسترسی به Google APIs استفاده می‌کند باید اطلاعات اعتباری مجوز داشته باشد که برنامه را به سرور OAuth 2.0 Google معرفی کند. مراحل زیر نحوه ایجاد اعتبارنامه برای پروژه‌تان را توضیح می‌دهد. سپس برنامه‌هایتان می‌توانند از این اطلاعات اعتباری برای دسترسی به میاناهای برنامه‌سازی کاربردی‌ای که برای آن پروژه فعال کرده‌اید استفاده کنند.

  1. به صفحه «کارخواهان» بروید.
  2. روی ایجاد مشتری کلیک کنید.
  3. بخش‌های زیر انواع کارخواه را که سرور صدور مجوز Google پشتیبانی می‌کند شرح می‌دهد. نوع کارخواهی را که برای برنامه‌تان توصیه می‌شود انتخاب کنید، نام کارخواه OAuth را وارد کنید، و فیلدهای دیگر را در فرم به‌طور مناسب تنظیم کنید.
iOS
  1. نوع برنامه iOS را انتخاب کنید.
  2. نامی برای کارخواه OAuth وارد کنید. این نام در صفحه «کارخواهان» پروژه شما برای شناسایی کارخواه نمایش داده می‌شود.
  3. شناسه دسته‌ای برنامه‌تان را وارد کنید. شناسه دسته مقدار کلید CFBundleIdentifier در فایل منبع فهرست دارایی اطلاعات برنامه (info.plist) است. این مقدار معمولاً در قاب General یا قاب Signing & Capabilities در ویرایشگر پروژه Xcode نمایش داده می‌شود. شناسه دسته‌بندی همچنین در بخش «اطلاعات کلی» صفحه «اطلاعات برنامه» برای برنامه در سایت Apple's App Store Connect نمایش داده می‌شود.

    مطمئن شوید که از شناسه دسته نرم‌افزاری صحیح برای برنامه‌تان استفاده می‌کنید، زیرا اگر از ویژگی «بررسی برنامه» استفاده می‌کنید، نمی‌توانید آن را تغییر دهید.

  4. (اختیاری)

    اگر برنامه در Apple App Store منتشر شده است، شناسه App Store برنامه‌تان را وارد کنید. «شناسه فروشگاه» رشته‌ای عددی است که در هر نشانی وب «فروشگاه برنامه‌های Apple» گنجانده می‌شود.

    1. برنامه Apple App Store را در دستگاه iOS یا iPadOS خود باز کنید.
    2. برنامه‌تان را جستجو کنید.
    3. دکمه «هم‌رسانی» (نماد مربع و پیکان رو به بالا) را انتخاب کنید.
    4. کپی کردن پیوند را انتخاب کنید.
    5. پیوند را در ویرایشگر نوشتار جای‌گذاری کنید. شناسه App Store بخش نهایی نشانی وب است.

      مثال: https://apps.apple.com/app/google/id284815942

  5. (اختیاری)

    «شناسه تیم» خود را وارد کنید. برای اطلاعات بیشتر، Locate your Team ID (پیدا کردن شناسه تیم) را در اسناد «حساب توسعه‌دهنده Apple» ببینید.

    توجه: اگر «بررسی برنامه» را برای مشتری‌تان فعال می‌کنید، فیلد «شناسه تیم» الزامی است.
  6. (اختیاری)

    «بررسی برنامه» را برای برنامه iOS خود فعال کنید. وقتی «بررسی برنامه» را فعال می‌کنید، از سرویس App Attest Apple برای تأیید اینکه درخواست‌های OAuth 2.0 که از کارخواه OAuth شما منشأ می‌گیرند واقعی هستند و از برنامه شما می‌آیند استفاده می‌شود. این کار به کاهش خطر جعل هویت برنامه کمک می‌کند. درباره فعال کردن «بررسی برنامه» برای برنامه iOS بیشتر بدانید.

  7. روی ایجاد کردن کلیک کنید.
UWP
  1. نوع برنامه پلاتفرم جهانی Windows را انتخاب کنید.
  2. نامی برای کارخواه OAuth وارد کنید. این نام در پروژه شما برای شناسایی مشتری نمایش داده می‌شود.
  3. شناسه ۱۲ نویسه‌ای Microsoft Store برنامه خود را وارد کنید. این مقدار را می‌توانید در مرکز شریک Microsoft در صفحه هویت برنامه در بخش «مدیریت برنامه» پیدا کنید.
  4. روی ایجاد کردن کلیک کنید.

برای برنامه‌های UWP، شناسه منبع یکسان تغییرمسیر بااستفاده از «شناسه امنیتی بسته» (SID) منحصربه‌فرد برنامه‌تان تشکیل می‌شود. می‌توانید Package SID برنامه‌تان را در فایل Package.appxmanifest در پروژه Visual Studio پیدا کنید.

وقتی شناسه کارخواه را در کنسول Google Cloud ایجاد می‌کنید، باید URI هدایت را در قالب زیر و بااستفاده از مقدار حروف کوچک «شناسه بسته» خود مشخص کنید:

ms-app://YOUR_APP_PACKAGE_SID

برای برنامه‌های UWP، طرح‌واره URI سفارشی نمی‌تواند بیشتر از ۳۹ نویسه باشد، همان‌طور که در اسناد Microsoft مشخص شده است.

شناسایی محدوده‌های دسترسی

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

پیش‌از اینکه پیاده‌سازی مجوز OAuth 2.0 را شروع کنید، توصیه می‌کنیم محدوده‌هایی را که برنامه‌تان برای دسترسی به آن‌ها به اجازه نیاز دارد شناسایی کنید.

‫YouTube Analytics API از دامنه‌های زیر استفاده می‌کند:

دامنه توضیحات
https://www. googleapis. com/ auth/ youtube حساب YouTube خود را مدیریت کنید
https://www. googleapis. com/ auth/ youtube. readonly حساب YouTube خود را مشاهده کنید
https://www. googleapis. com/ auth/ youtubepartner دارایی ها و محتوای مرتبط خود را در YouTube مشاهده و مدیریت کنید
https://www. googleapis. com/ auth/ yt-analytics-monetary. readonly گزارش های پولی و غیر پولی YouTube Analytics را برای محتوای YouTube خود مشاهده کنید
https://www. googleapis. com/ auth/ yt-analytics. readonly گزارش‌های YouTube Analytics را برای محتوای YouTube خود مشاهده کنید

‫YouTube Reporting API از دامنه‌های زیر استفاده می‌کند:

دامنه توضیحات
https://www. googleapis. com/ auth/ yt-analytics-monetary. readonly گزارش های پولی و غیر پولی YouTube Analytics را برای محتوای YouTube خود مشاهده کنید
https://www. googleapis. com/ auth/ yt-analytics. readonly گزارش‌های YouTube Analytics را برای محتوای YouTube خود مشاهده کنید

سند OAuth 2.0 API Scopes حاوی فهرست کاملی از دامنه‌هایی است که ممکن است برای دسترسی به Google API استفاده کنید.

دریافت کدهای دسترسی OAuth 2.0

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

مرحله ۱: تولید یک کد درستی‌سنج و چالش

‫Google از پروتکل کلید اثبات برای مبادله کد (PKCE) برای ایمن‌تر کردن جریان برنامه نصب‌شده پشتیبانی می‌کند. برای هر درخواست مجوز، یک کد درستی‌سنج منحصربه‌فرد ایجاد می‌شود و مقدار تبدیل‌شده آن، که «code_challenge» نامیده می‌شود، برای دریافت کد مجوز به سرور مجوز ارسال می‌شود.

ایجاد کد درستی‌سنجی

‫code_verifier یک رشته تصادفی رمزنگاری‌شده با آنتروپی بالا است که از نویسه‌های غیررزروشده [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~" استفاده می‌کند و حداقل طول آن ۴۳ نویسه و حداکثر طول آن ۱۲۸ نویسه است.

تأییدکننده کد باید از آنتروپی کافی برخوردار باشد تا حدس زدن مقدار آن غیرعملی شود.

ایجاد چالش کد

دو روش برای ایجاد چالش کد پشتیبانی می‌شود.

روش‌های تولید چالش کد
S256 (توصیه‌شده) چالش کد درهم‌سازی SHA256 کد (بدون فاصله) کدبندی‌شده با Base64URL است درستی‌سنج.
code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))
ساده چالش کد همان مقدار تأییدکننده کد است که در بالا تولید شده است.
code_challenge = code_verifier

مرحله ۲: ارسال درخواست به سرور OAuth 2.0 در Google

برای دریافت مجوز کاربر، درخواستی به سرور مجوز Google در https://accounts.google.com/o/oauth2/v2/auth ارسال کنید. این نقطه پایانی جستجوی جلسه فعال را مدیریت می‌کند، کاربر را اصالت‌سنجی می‌کند، و رضایت کاربر را دریافت می‌کند. نقطه پایان فقط ازطریق SSL قابل‌دسترسی است و اتصال‌های HTTP (غیر SSL) را رد می‌کند.

سرور مجوز از پارامترهای رشته پُرسمان زیر برای برنامه‌های نصب‌شده پشتیبانی می‌کند:

پارامترها
client_id الزامی

شناسه کارخواه برای برنامه شما. می‌توانید این مقدار را در صفحه «کارخواه‌ها» در «کنسول Cloud» پیدا کنید.

redirect_uri الزامی

تعیین می‌کند که سرور مجوز Google چگونه پاسخی به برنامه شما ارسال کند. چندین گزینه تغییرمسیر برای برنامه‌های نصب‌شده دردسترس است و شما باید اعتبارنامه‌های مجوز خود را با روش تغییرمسیر خاصی در ذهن تنظیم کنید.

این مقدار باید دقیقاً با یکی از نشانی‌های وب هدایت مجاز برای کارخواه OAuth 2.0 مطابقت داشته باشد، که آن را در Cloud Console صفحه «کارخواه‌ها» کارخواه پیکربندی کرده‌اید. اگر این مقدار با شناسه منبع یکسان مجاز مطابقت نداشته باشد، خطای redirect_uri_mismatch دریافت خواهید کرد.

جدول مقدار پارامتر redirect_uri مناسب برای هر روش را نشان می‌دهد:

‫redirect_uri مقدار
طرح‌واره URI سفارشی com.example.app:redirect_uri_path

یا

com.googleusercontent.apps.123:redirect_uri_path
  • ‫com.example.app نشانه‌گذاری ساناد معکوس دامنه‌ای تحت کنترل شما است. طرح سفارشی باید حاوی نقطه باشد تا معتبر باشد.
  • com.googleusercontent.apps.123 نماد ساناد معکوس شناسه کارخواه است.
  • redirect_uri_path یک مؤلفه مسیر اختیاری است، مانند /oauth2redirect. توجه داشته باشید که مسیر باید با یک خط مورب شروع شود که با نشانی‌های وب HTTP معمولی متفاوت است.
نشانی IP حلقه بازگشتی http://127.0.0.1:port یا http://[::1]:port

پلاتفرم خود را برای نشانی IP حلقه برگشت مربوطه پُرسمان کنید و شنونده HTTP را در درگاه دردسترس تصادفی شروع کنید. port را با شماره درگاه واقعی که برنامه‌تان به آن گوش می‌دهد جایگزین کنید.

توجه داشته باشید که پشتیبانی از گزینه تغییرمسیر نشانی IP برگشت‌سنجی در برنامه‌های تلفن همراه منسوخ شده است.

response_type الزامی

تعیین می‌کند که آیا نقطه پایان Google OAuth 2.0 کد مجوز برمی‌گرداند یا نه.

مقدار پارامتر را برای برنامه‌های نصب‌شده روی code تنظیم کنید.

scope الزامی

فهرستی از حوزه‌ها که با فاصله از هم جدا شده‌اند و منابعی را که برنامه شما می‌تواند ازطرف کاربر به آن‌ها دسترسی داشته باشد شناسایی می‌کند. این مقادیر به صفحه رضایت که Google به کاربر نمایش می‌دهد اطلاع‌رسانی می‌کند.

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

‫YouTube Analytics API از دامنه‌های زیر استفاده می‌کند:

دامنه توضیحات
https://www. googleapis. com/ auth/ youtube حساب YouTube خود را مدیریت کنید
https://www. googleapis. com/ auth/ youtube. readonly حساب YouTube خود را مشاهده کنید
https://www. googleapis. com/ auth/ youtubepartner دارایی ها و محتوای مرتبط خود را در YouTube مشاهده و مدیریت کنید
https://www. googleapis. com/ auth/ yt-analytics-monetary. readonly گزارش های پولی و غیر پولی YouTube Analytics را برای محتوای YouTube خود مشاهده کنید
https://www. googleapis. com/ auth/ yt-analytics. readonly گزارش‌های YouTube Analytics را برای محتوای YouTube خود مشاهده کنید

‫YouTube Reporting API از دامنه‌های زیر استفاده می‌کند:

دامنه توضیحات
https://www. googleapis. com/ auth/ yt-analytics-monetary. readonly گزارش های پولی و غیر پولی YouTube Analytics را برای محتوای YouTube خود مشاهده کنید
https://www. googleapis. com/ auth/ yt-analytics. readonly گزارش‌های YouTube Analytics را برای محتوای YouTube خود مشاهده کنید

سند OAuth 2.0 API Scopes فهرست کاملی از دامنه‌هایی که ممکن است برای دسترسی به Google APIs استفاده کنید ارائه می‌دهد.

code_challenge توصیه‌شده

code_verifier کدبندی‌شده‌ای را مشخص می‌کند که به‌عنوان چالش سمت سرور درطول تبادل کد مجوز استفاده خواهد شد. برای اطلاعات بیشتر، ایجاد چالش کد را ببینید.

code_challenge_method توصیه‌شده

مشخص می‌کند از چه روشی برای کدبندی code_verifier استفاده شده است که درطول تبادل کد مجوز استفاده خواهد شد. این پارامتر باید با پارامتر code_challenge استفاده شود. اگر مقدار code_challenge_method در درخواستی که شامل code_challenge است وجود نداشته باشد، به‌طور پیش‌فرض plain خواهد بود. تنها مقادیر پشتیبانی‌شده برای این پارامتر S256 یا plain است.

state توصیه‌شده

هر مقدار رشته‌ای را که برنامه شما برای حفظ وضعیت بین درخواست صدور مجوز و پاسخ سرور صدور مجوز استفاده می‌کند مشخص می‌کند. سرور مقدار دقیقی را که به‌عنوان جفت name=value در شناسه قطعه نشانی وب (#) مربوط به redirect_uri ارسال می‌کنید، پس‌از اینکه کاربر با درخواست دسترسی برنامه‌تان موافقت یا مخالفت کرد، برمی‌گرداند.

می‌توانید از این پارامتر برای اهداف مختلفی استفاده کنید، مثلاً هدایت کاربر به منبع صحیح در برنامه، ارسال اعداد یک‌بارمصرف، و کاهش جعل درخواست بین‌سایتی. ازآنجایی‌که redirect_uri شما قابل حدس زدن است، استفاده از مقدار state می‌تواند اطمینان شما را از اینکه اتصال ورودی نتیجه درخواست اصالت‌سنجی است افزایش دهد. اگر رشته‌ای تصادفی تولید کنید یا درهم‌سازی کوکی یا مقدار دیگری را که وضعیت مشتری را ضبط می‌کند کدبندی کنید، می‌توانید پاسخ را اعتبارسنجی کنید تا علاوه‌براین مطمئن شوید درخواست و پاسخ در یک مرورگر ایجاد شده‌اند و دربرابر حملاتی مثل جعل درخواست بین‌سایتی محافظت کنید. برای دیدن نمونه‌ای از نحوه ایجاد و تأیید کردن کد state، به اسناد OpenID Connect مراجعه کنید.

login_hint اختیاری

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

مقدار پارامتر را روی نشانی ایمیل یا شناسه sub تنظیم کنید که معادل شناسه Google کاربر است.

نشانی‌های وب مجوز نمونه

برگه‌های زیر نمونه نشانی‌های وب مجوز را برای گزینه‌های مختلف URI هدایت نشان می‌دهند.

هر نشانی وب دسترسی به دامنه‌ای را درخواست می‌کند که اجازه دسترسی به گزارش‌های YouTube Analytics کاربر را می‌دهد.

نشانی‌های وب به‌جز مقدار پارامتر redirect_uri یکسان هستند. نشانی‌های وب همچنین حاوی پارامترهای الزامی response_type و client_id و پارامتر اختیاری state هستند. هر نشانی وب حاوی شکست خط و فاصله برای خوانایی است.

طرح‌واره URI سفارشی

https://accounts.google.com/o/oauth2/v2/auth?
 scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyt-analytics.readonly&
 response_type=code&
 state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foauth2.example.com%2Ftoken&
 redirect_uri=com.example.app%3A/oauth2redirect&
 client_id=client_id

نشانی IP مسیریابی بازگشتی

https://accounts.google.com/o/oauth2/v2/auth?
 scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyt-analytics.readonly&
 response_type=code&
 state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foauth2.example.com%2Ftoken&
 redirect_uri=http%3A//127.0.0.1%3A9004&
 client_id=client_id

مرحله ۳: Google از کاربر درخواست رضایت می‌کند

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

برنامه شما در این مرحله نیازی به انجام کاری ندارد زیرا منتظر پاسخ سرور OAuth 2.0 از Google است که نشان می‌دهد آیا دسترسی اعطا شده است یا خیر. آن پاسخ در مرحله زیر توضیح داده شده است.

خطاها

درخواست‌های ارسال‌شده به نقطه پایانی مجوز OAuth 2.0 در Google ممکن است به‌جای جریان‌های اصالت‌سنجی و مجوز موردانتظار، پیام‌های خطای سَمت کاربر را نمایش دهند. کدهای خطای رایج و راه‌حل‌های پیشنهادی عبارت‌اند از:

admin_policy_enforced

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

disallowed_useragent

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

توسعه‌دهندگان iOS و macOS ممکن است هنگام باز کردن درخواست‌های صدور مجوز در WKWebView با این خطا مواجه شوند. توسعه‌دهندگان باید به‌جای آن از کتابخانه‌های iOS مانند ورود به سیستم با Google برای iOS یا AppAuth برای iOS از OpenID Foundation استفاده کنند.

توسعه‌دهندگان وب ممکن است زمانی با این خطا مواجه شوند که برنامه iOS یا macOS پیوند وب عمومی را در عامل کاربر جاسازی‌شده باز کند و کاربر از سایت شما به نقطه پایانی مجوز OAuth 2.0 در Google پیمایش کند. توسعه‌دهندگان باید اجازه دهند پیوندهای عمومی در مدیریت‌کننده پیوند پیش‌فرض سیستم‌عامل باز شوند، که شامل هر دو مدیریت‌کننده پیوندهای جهانی یا برنامه مرورگر پیش‌فرض می‌شود. کتابخانه SFSafariViewController نیز گزینه پشتیبانی‌شده‌ای است.

org_internal

شناسه کارخواه OAuth در درخواست بخشی از پروژه‌ای است که دسترسی به «حساب‌های Google» را در سازمان Google Cloud خاصی محدود می‌کند. برای اطلاعات بیشتر درباره این گزینه پیکربندی، به بخش نوع کاربر در مقاله راهنمای «راه‌اندازی صفحه موافقت OAuth» مراجعه کنید.

deleted_client

کارخواه OAuth که برای ایجاد درخواست استفاده می‌شود حذف شده است. حذف می‌تواند به‌صورت دستی یا به‌طور خودکار درصورت استفاده نشدن از کارخواه‌ها انجام شود. کاربران حذف‌شده را می‌توانید ظرف ۳۰ روز پس‌از حذف بازیابی کنید. بیشتر بدانید .

invalid_grant

اگر از درستی‌سنج کد و چالش استفاده می‌کنید، پارامتر code_callenge نامعتبر است یا وجود ندارد. مطمئن شوید که پارامتر code_challenge به‌درستی تنظیم شده باشد.

هنگام بازآوری کد دسترسی، ممکن است کد منقضی شده باشد یا نامعتبر شده باشد. کاربر را دوباره اصالت‌سنجی کنید و برای دریافت نشان‌های جدید، از کاربر بخواهید رضایت دهد. اگر همچنان این خطا را می‌بینید، مطمئن شوید که برنامه‌تان به‌درستی پیکربندی شده است و از نشان‌ها و پارامترهای صحیح در درخواستتان استفاده می‌کنید. درغیراین‌صورت، ممکن است حساب کاربری حذف یا غیرفعال شده باشد.

redirect_uri_mismatch

redirect_uri ارسال‌شده در درخواست مجوز با نشانی وب هدایت مجاز برای شناسه کارخواه OAuth مطابقت ندارد. URIهای هدایت مجاز را در Google Cloud Console صفحه کارخواه‌ها مرور کنید.

‫redirect_uri ارسال‌شده ممکن است برای نوع کارخواه نامعتبر باشد.

پارامتر redirect_uri ممکن است به جریان OAuth خارج‌از باند (OOB) اشاره داشته باشد که منسوخ شده است و دیگر پشتیبانی نمی‌شود. برای به‌روزرسانی یکپارچه‌سازی خود، به راهنمای انتقال مراجعه کنید.

invalid_request

در درخواستی که ارائه کردید مشکلی وجود داشت. این مشکل ممکن است به چند دلیل باشد:

  • درخواست به‌درستی قالب‌بندی نشده بود
  • پارامترهای الزامی در درخواست وجود نداشت
  • درخواست از روشی برای صدور مجوز استفاده می‌کند که Google از آن پشتیبانی نمی‌کند. به‌تأیید رساندن اینکه یکپارچه‌سازی OAuth شما از روش یکپارچه‌سازی توصیه‌شده استفاده می‌کند
  • از طرح سفارشی پشتیبانی‌نشده‌ای برای نشانی وب هدایت استفاده شده است. اگر پیام خطای طرح‌واره URI سفارشی در برنامه‌های Android یا Chrome پشتیبانی نمی‌شود را می‌بینید، درباره جایگزین‌های طرح‌واره URI سفارشی بیشتر بدانید.

مرحله ۴: رسیدگی به پاسخ سرور OAuth 2.0

روشی که برنامه شما پاسخ مجوز را دریافت می‌کند به طرح‌واره URI تغییرمسیر که استفاده می‌کند بستگی دارد. صرف‌نظر از طرح، پاسخ حاوی کد مجوز (code) یا خطا (error) خواهد بود. برای مثال، error=access_denied نشان می‌دهد که کاربر درخواست را رد کرده است.

اگر کاربر به برنامه شما اجازه دسترسی بدهد، می‌توانید کد مجوز را با کد دسترسی و ژتون بازآوری معاوضه کنید (همان‌طور که در مرحله بعد توضیح داده شده است).

مرحله ۵: معاوضه کد مجوز با ژتون‌های بازآوری و دسترسی

برای معاوضه کد مجوز با کد دسترسی، نقطه پایانی https://oauth2.googleapis.com/token را فراخوانی کنید و پارامترهای زیر را تنظیم کنید:

فیلدها
client_id شناسه کارخواه از Cloud Console صفحه کارخواه‌ها.
client_secret اختیاری

رمز کارخواه دریافت‌شده از «کنسول Cloud» صفحه کارخواه‌ها.

code کد مجوز برگشت‌داده‌شده از درخواست اولیه.
code_verifier در مرحله ۱، کد درستی‌سنجی ایجاد کردید.
grant_type همان‌طور که در مشخصات OAuth 2.0 تعریف شده است، مقدار این فیلد باید روی authorization_code تنظیم شود.
redirect_uri یکی از نشانی‌های وب هدایت فهرست‌شده برای پروژه شما در Cloud Console صفحه «کارخواه‌ها» برای client_id داده‌شده.

هرچند استفاده از DPoP اختیاری است، اما برای افزایش امنیت توصیه می‌شود. امنیت DPoP به محدود بودن کلید خصوصی به یک دستگاه بستگی دارد؛ توصیه می‌کنیم آن را به‌گونه‌ای ذخیره کنید که نتوان آن را از دستگاه کپی کرد، مثلاً بااستفاده از TPM،‏ Secure Enclave، یا دیگر محل‌های ذخیره کلید با پشتیبانی سخت‌افزاری. برای استفاده از DPoP، برنامه شما باید برای هر درخواست به نقطه پایانی رمز، یک JWT اثبات DPoP جدید و منحصربه‌فرد تولید کند و آن را به‌عنوان سرصفحه درخواست HTTP اضافه کند.

سرایند الزامی شرح
DPoP اختیاری اثبات DPoP یک JWT است که مالکیت کلید خصوصی را اثبات می‌کند. این سرصفحه است، نه پارامتر. درصورت ارائه، نشان‌های برگردانده‌شده به این کلید محدود می‌شوند. برای هر درخواست باید مدرک جدید و منحصربه‌فردی تولید شود و باید شامل ادعاهای htm (روش HTTP) و htu (نشانی وب HTTP) باشد که با درخواست مطابقت داشته باشد.

قطعه کد زیر یک درخواست نمونه را نشان می‌دهد:

POST /token HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded
DPoP: eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6IkVTMjU2IiwiandrIjp7Imt0eSI6Ik\
 VDIiwieCI6Imw4dEZyaHgtMzR0VjNoUklDUkRZOXpDa0RscEJoRjQyVVFVZldWQVdCR\
 nMiLCJ5IjoiOVZFNGpmX09rX282NHpiVFRsY3VOSmFqSG10NnY5VERWclUwQ2R2R1JE\
 QSIsImNydiI6IlAtMjU2In19.eyJqdGkiOiItQndDM0VTYzZhY2MybFRjIiwiaHRtIj\
 oiUE9TVCIsImh0dSI6Imh0dHBzOi8vc2VydmVyLmV4YW1wbGUuY29tL3Rva2VuIiwia\
 WF0IjoxNTYyMjYyNjE2fQ.2-GxA6T8lP4vfrg8v-FdWP0A0zdrj8igiMLvqRMUvwnQg\
 4PtFLbdLXiOSsX0x7NVY-FNyJK70nfbV37xRZT3Lg

code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7&
client_id=your_client_id&
redirect_uri=http://127.0.0.1:9004&
grant_type=authorization_code

ساختن اثبات DPoP

مراحل زیر نحوه ساختن اثبات DPoP بااستفاده از OpenSSL از خط فرمان را نشان می‌دهد:

  1. تولید جفت کلید EC P-256:
    openssl ecparam -name prime256v1 -genkey -noout -out dpop_private.pem
    openssl ec -in dpop_private.pem -pubout -out dpop_public.pem
  2. ایجاد سرایند DPoP:

    سرایند باید شامل ادعاهای typ، alg، و jwk (کلید عمومی) باشد. مقادیر x و y مختصات کدبندی‌شده Base64Url کلید عمومی EC شما هستند. این JSON را با Base64Url کدبندی کنید:

    {
      "typ":"dpop+jwt",
      "alg":"ES256",
      "jwk": {
        "kty":"EC",
        "x":"YOUR_PUBLIC_KEY_X",
        "y":"YOUR_PUBLIC_KEY_Y",
        "crv":"P-256"
      }
    }
  3. ساختن محتوای DPoP:

    بار باید شامل jti (شناسه یکتای درخواست)، htm (روش HTTP، برای نمونه، POST)، htu (نشانی وب HTTP، برای نمونه، https://oauth2.googleapis.com/token)، و iat (زمان صدور) باشد. اگر در پاسخ به درخواست قبلی، یک nonce از سرور در سرصفحه DPoP-Nonce دریافت کردید، باید آن مقدار nonce را در ادعای nonce اضافه کنید. ادعای nonce برای تبادل کد مجوز اختیاری است و فقط زمانی استفاده می‌شود که سرایند DPoP-Nonce قبلاً دریافت شده باشد. این JSON را با Base64Url کدبندی کنید:

    {
      "jti":"JTI_VALUE",
      "htm":"POST",
      "htu":"https://oauth2.googleapis.com/token",
      "iat":YOUR_JWT_ISSUED_TIME,
      "nonce":"SERVER_PROVIDED_NONCE"
    }

    مقدار jti به نوع مبادله بستگی دارد:

    • برای تبادل کد مجوز، jti باید درهم‌سازی SHA256 کد مجوز باشد که با Base64Url کدبندی شده است: "jti":"BASE64URL(SHA256(AUTHORIZATION_CODE))".
    • برای تبادل‌های کد نوسازی، jti باید یک شناسه یکتای هر درخواست باشد: "jti":"YOUR_UNIQUE_PER_REQUEST_IDENTIFIER".
  4. امضا کردن مدرک:

    سرصفحه و بار داده کدگذاری‌شده را با نقطه (.) به‌هم متصل کنید، سپس نتیجه را با کلید خصوصی‌تان بااستفاده از ES256 امضا کنید. توجه داشته باشید که JWS نیاز دارد امضا در قالب R | S به‌هم‌پیوسته خام (۶۴ بایت برای P-256) باشد. اگر مستقیماً از OpenSSL استفاده می‌کنید، باید امضای پیش‌فرض با کدبندی ASN.1 DER را به این قالب خام تبدیل کنید.

تبادل موفق با پاسخ 200 OK حاوی نشان‌ها مشخص می‌شود. اگر درطول تبادل از مدرک DPoP معتبری استفاده شود، رمز بازآوری که Google برمی‌گرداند به کلید شما محدود خواهد شد، اما رمزهای دسترسی محدود نخواهند شد. رمزهای دسترسی token_type مربوط به Bearer را به‌جای DPoP حفظ خواهند کرد. علاوه‌براین، Google سرصفحه HTTP DPoP-Nonce را در پاسخ برمی‌گرداند. کارخواه شما باید این nonce را در حافظه نهان ذخیره کند و آن را در ادعای nonce مدرک DPoP در درخواست‌های بعدی (مثلاً هنگام تبادل کردن کد نوسازی برای کد دسترسی جدید، یا هنگام فراخوانی کردن میاناهای برنامه‌سازی کاربردی محافظت‌شده با DPoP) بگنجاند. بااستفاده از این تک‌عنصر صادرشده زودرس، می‌توانید از خطای رفت‌وبرگشت اضافی (use_dpop_nonce) در درخواست بعدی‌تان جلوگیری کنید.

برای درخواست‌های تبادل ژتون که با ژتون‌های بازآوری محدودشده با DPoP انجام می‌شود، باید اثبات‌های DPoP اضافه شود.

اگر سرایند DPoP در زمان موردانتظار وجود نداشته باشد، نامعتبر باشد، یا اگر مدرک از کلیدی متفاوت با کلید محدودشده به کد استفاده کند، تبادل ناموفق رخ می‌دهد. در این موارد، سرور خطای 400 Bad Request برمی‌گرداند. اگر مدرک DPoP ادعاهای htm یا htu ناهماهنگ، iat منقضی، jti مجدداً استفاده‌شده، یا امضای نامعتبر داشته باشد، Google کد خطای invalid_dpop_proof برمی‌گرداند. اگر یک DPoP nonce لازم باشد، مثلاً درطول تبادل ژتون بازآوری، و اثبات DPoP فاقد ادعای nonce باشد، یا مقدار nonce برای سرور غیرقابل‌قبول باشد (مثلاً منقضی شده باشد، قبلاً استفاده شده باشد، یا نادرست باشد)، Google کد خطای use_dpop_nonce را به‌همراه سرصفحه HTTP‏ DPoP-Nonce حاوی یک nonce جدید برمی‌گرداند که می‌توانید در درخواست بعدی استفاده کنید. خطاهای دیگر ممکن است invalid_grant را برگرداند.

‫Google با برگرداندن یک شیء JSON که حاوی یک کد دسترسی کوتاه‌مدت و یک کد نوسازی است به این درخواست پاسخ می‌دهد.

پاسخ حاوی فیلدهای زیر است:

فیلدها
access_token نشانه‌ای که برنامه شما برای صدور مجوز درخواست Google API ارسال می‌کند.
expires_in طول عمر باقی‌مانده کد دسترسی برحسب ثانیه.
id_token توجه: این دارایی فقط درصورتی برگردانده می‌شود که درخواست شما شامل محدوده هویت باشد، مثل openid، profile، یا email. این مقدار یک JSON Web Token (JWT) است که حاوی اطلاعات هویتی امضاشده دیجیتالی درباره کاربر است.
refresh_token کدی که می‌توانید از آن برای دریافت کد دسترسی جدید استفاده کنید. کدهای بازآوری تا زمانی که کاربر دسترسی را لغو کند یا کد بازآوری منقضی شود معتبر هستند. اگر از DPoP استفاده شده باشد، ژتون بازآوری به کلید خصوصی استفاده‌شده برای امضای اثبات DPoP محدود می‌شود. توجه داشته باشید که نشان‌های بازآوری همیشه برای برنامه‌های نصب‌شده برگردانده می‌شوند.
refresh_token_expires_in طول عمر باقی‌مانده ژتون بازآوری به ثانیه. این مقدار فقط زمانی تنظیم می‌شود که کاربر دسترسی مبتنی بر زمان اعطا کند.
scope دامنه‌های دسترسی اعطاشده توسط access_token به‌صورت فهرستی از رشته‌های حساس به حروف بزرگ و کوچک که با فاصله از هم جدا شده‌اند بیان می‌شود.
token_type نوع کد برگردانده‌شده. این مقدار همیشه Bearer است، حتی وقتی از DPoP استفاده می‌شود.

تکه کد زیر سرصفحه‌ها و متن پاسخ موفقیت‌آمیز نمونه‌ای را هنگام استفاده از DPoP نشان می‌دهد:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
DPoP-Nonce: AN3XwJjZsjnb0ZuWkRlek8QU7wY-Zhf-5IP6tO0tORz0KgtDT1Bo8FX-w4nz3r5lnepI

{
  "access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
  "expires_in": 3920,
  "token_type": "Bearer",
  "scope": "https://www.googleapis.com/auth/yt-analytics.readonly https://www.googleapis.com/auth/calendar.readonly",
  "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI"
}

مرحله ۶: بررسی کردن گستره‌هایی که کاربران اعطا کرده‌اند

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

بااین‌حال، چند استثنا وجود دارد. برنامه‌های Google Workspace Enterprise با واگذاری اختیار در سطح دامنه، یا برنامه‌هایی که به‌عنوان معتمد علامت‌گذاری شده‌اند، از صفحه موافقت با اجازه‌های دقیق عبور می‌کنند. برای این برنامه‌ها، کاربران صفحه رضایت اجازه دانه‌ای را نخواهند دید. درعوض، برنامه‌تان یا همه گستره‌های درخواست‌شده را دریافت می‌کند یا هیچ‌کدام را دریافت نمی‌کند.

برای اطلاعات دقیق‌تر، نحوه مدیریت اجازه‌های ریزدانه را ببینید.

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

برای مثال، پاسخ نمونه کد دسترسی زیر نشان می‌دهد که کاربر به برنامه شما اجازه دسترسی به فعالیت Drive فقط خواندنی و اجازه‌های رویدادهای «تقویم» را داده است:

  {
    "access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
    "expires_in": 3920,
    "token_type": "Bearer",
    "scope": "https://www.googleapis.com/auth/yt-analytics.readonly https://www.googleapis.com/auth/calendar.readonly",
    "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI"
  }

فراخوانی میاناهای برنامه‌سازی کاربردی Google

پس‌از اینکه برنامه شما کد دسترسی را دریافت کرد، می‌توانید از این کد برای تماس با «میانای برنامه‌سازی کاربردی Google» ازطرف حساب کاربری معینی استفاده کنید، به‌شرطی که محدوده(های) دسترسی موردنیاز میانای برنامه‌سازی کاربردی اعطا شده باشد. برای انجام این کار، کد دسترسی را با گنجاندن پارامتر پُرسمان access_token یا مقدار سرصفحه HTTP Authorization در درخواست به میانای برنامه‌سازی کاربردی بگنجانید.Bearer درصورت امکان، سرصفحه HTTP ترجیح داده می‌شود، زیرا رشته‌های پرسمان معمولاً در گزارش‌های سرور قابل‌مشاهده هستند. در اکثر موارد می‌توانید از کتابخانه مشتری برای تنظیم تماس‌های خود با Google APIs استفاده کنید (برای مثال، هنگام تماس با YouTube Analytics API).

توجه داشته باشید که YouTube Analytics API از جریان حساب سرویس پشتیبانی نمی‌کند. ‫YouTube Reporting API از حساب‌های سرویس فقط برای مالکان محتوای YouTube که مالک و مدیر چندین کانال YouTube هستند، مانند شرکت‌های ضبط موسیقی و استودیوهای فیلم‌سازی، پشتیبانی می‌کند.

می‌توانید همه میاناهای برنامه‌سازی کاربردی Google را امتحان کنید و دامنه‌های آن‌ها را در OAuth 2.0 Playground مشاهده کنید.

مثال‌های HTTP GET

تماس با reports.query نقطه پایان (YouTube Analytics API) بااستفاده از سرصفحه Authorization: Bearer HTTP ممکن است شبیه به موارد زیر باشد. توجه داشته باشید که باید کد دسترسی خودتان را مشخص کنید:

GET /youtube/v2/reports?ids=channel%3D%3DMINE&startDate=2016-05-01&endDate=2016-06-30&metrics=views HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer access_token

در اینجا فراخوانی برای همان میانای برنامه‌سازی کاربردی برای کاربر اصالت‌سنجی‌شده بااستفاده از پارامتر رشته پُرسمان access_token ارائه شده است:

GET https://www.googleapis.com/youtube/v2/reports?access_token=access_token&ids=channel%3D%3DMINE&startDate=2016-05-01&endDate=2016-06-30&metrics=views

‫curl مثال

می‌توانید این فرمان‌ها را با برنامه خط فرمان curl آزمایش کنید. در اینجا نمونه‌ای آورده شده است که از گزینه سرصفحه HTTP (ترجیحی) استفاده می‌کند:

curl -H "Authorization: Bearer access_token" https://www.googleapis.com/youtube/v2/reports?ids=channel%3D%3DMINE&startDate=2016-05-01&endDate=2016-06-30&metrics=views

یا، به‌عنوان گزینه جایگزین، گزینه پارامتر رشته پُرسمان:

curl https://www.googleapis.com/youtube/v2/reports?access_token=access_token&ids=channel%3D%3DMINE&startDate=2016-05-01&endDate=2016-06-30&metrics=views

بازآوری کد دسترسی

کدهای دسترسی به‌طور دوره‌ای منقضی می‌شوند و به اطلاعات اعتباری نامعتبر برای درخواست API مربوطه تبدیل می‌شوند. اگر دسترسی آفلاین به گستره‌های مرتبط با کد دسترسی را درخواست کرده باشید، می‌توانید کد دسترسی را بدون درخواست اجازه از کاربر (ازجمله زمانی که کاربر حضور ندارد) بازآوری کنید.

برای بازآوری کردن یک کد دسترسی، برنامه شما یک درخواست HTTPS POST به سرور مجوز Google (https://oauth2.googleapis.com/token) ارسال می‌کند که شامل پارامترهای زیر در بدنه درخواست است:

نام مقدار
client_id شناسه مشتری به‌دست‌آمده از کنسول API.
client_secret اختیاری

رمز کارخواه دریافت‌شده از کنسول API. (‫client_secret برای درخواست‌های کارخواه‌های ثبت‌شده به‌عنوان برنامه‌های Android،‏ iOS، یا Chrome قابل‌اعمال نیست.)

grant_type همان‌طور که در مشخصات OAuth 2.0 تعریف شده است، مقدار این فیلد باید روی refresh_token تنظیم شود.
refresh_token نماد بازآوری از تبادل کد مجوز برگردانده شد.

هرچند استفاده از DPoP اختیاری است، اما برای افزایش امنیت توصیه می‌شود. برای استفاده از DPoP با ژتون بازآوری، برنامه شما باید برای هر درخواست به نقطه پایانی ژتون، یک JWT اثبات DPoP جدید و منحصربه‌فرد تولید کند. این مدرک باید با همان کلید خصوصی که درطول تبادل کد مجوز اولیه استفاده شده است امضا شود. برنامه شما مدرک را به‌عنوان سرایند درخواست HTTP اضافه می‌کند.

سرایند الزامی شرح
DPoP اختیاری اثبات DPoP یک JWT است که مالکیت کلید خصوصی را اثبات می‌کند. این سرصفحه است، نه پارامتر. اگر ارائه شود، نشان‌های برگشتی به این کلید محدود می‌شوند. برای هر درخواست باید مدرک جدید و منحصربه‌فردی تولید شود و باید شامل ادعاهای htm (روش HTTP) و htu (شناسه منبع یکسان HTTP) باشد که با درخواست مطابقت داشته باشد.

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

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

client_id=your_client_id&
refresh_token=refresh_token&
grant_type=refresh_token

برای استفاده از DPoP با ژتون بازآوری، باید JWT اثبات DPoP جدید و منحصربه‌فردی برای درخواست تولید کنید. برای دستورالعمل‌های گام‌به‌گام درباره تولید جفت کلید و ساختن JWT، به ساختن اثبات DPoP مراجعه کنید.

تبادل موفق با پاسخ 200 OK حاوی کد دسترسی جدید نشان داده می‌شود. وقتی از DPoP استفاده می‌شود، token_type Bearer است. پاسخ موفق تأیید می‌کند مدرک DPoP برای کد نوسازی پذیرفته شده است. Google همچنین ممکن است سرصفحه HTTP جدید DPoP-Nonce را در پاسخ برگرداند؛ درصورت برگردانده شدن، کارخواه شما باید این nonce را در حافظه نهان ذخیره کند و آن را در ادعای nonce اثبات DPoP در درخواست‌های بعدی لحاظ کند.

اگر سرایند DPoP وجود نداشته باشد، نامعتبر باشد، یا از کلید نادرستی استفاده کند، تبادل ناموفق رخ می‌دهد. برای جزئیات مربوط به کدهای خطای DPoP خاص و مدیریت تک‌منش‌ها، به تبادل ناموفق مراجعه کنید.

تکه‌کد زیر نمونه‌ای از سرایندها و متن پاسخ موفقیت‌آمیز را هنگام استفاده از DPoP نشان می‌دهد:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
DPoP-Nonce: AN3XwJjZsjnb0ZuWkRlek8QU7wY-Zhf-5IP6tO0tORz0KgtDT1Bo8FX-w4nz3r5lnepI

{
  "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 به‌همراه کد خطا برگردانده می‌شود.

روش‌های هدایت مجدد برنامه

طرح‌واره URI سفارشی

طرح‌واره‌های URI سفارشی نوعی پیوند عمیق هستند که از طرح‌واره تعریف‌شده سفارشی برای باز کردن برنامه شما استفاده می‌کنند.

جایگزین استفاده از طرح‌واره‌های URI سفارشی در برنامه‌های Chrome

از Chrome Identity API استفاده کنید که پاسخ OAuth 2.0 را مستقیماً به برنامه شما ارائه می‌دهد و نیاز به نشانی وب هدایت را ازبین می‌برد.

نشانی IP مسیریابی بازگشتی (macOS،‏ Linux، رایانه Windows)

برای دریافت کد مجوز بااستفاده از این نشانی وب، برنامه‌تان باید در سرور وب محلی درحال گوش دادن باشد. این امکان در بسیاری از پلاتفرم‌ها وجود دارد، اما در همه آن‌ها دردسترس نیست. بااین‌حال، اگر پلاتفرم شما از آن پشتیبانی می‌کند، این روش توصیه می‌شود برای دریافت کد مجوز.

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

استفاده توصیه‌شده برنامه‌های رایانه macOS،‏ Linux، و Windows (اما نه «پلاتفرم جهانی Windows»)
مقادیر فرم نوع برنامه را روی برنامه رایانه‌ای تنظیم کنید.

کپی/جای‌گذاری دستی (منسوخ‌شده)

از برنامه‌هایتان محافظت کنید

تأیید مالکیت برنامه برای Chrome

می‌توانید مالکیت برنامه‌تان را به‌تأیید برسانید تا خطر جعل هویت برنامه کاهش یابد.

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

  • باید موردی ثبت‌شده در داشبورد توسعه‌دهندگان «نت‌بازار Chrome» با همان شناسه موردی داشته باشید که برای کارخواه OAuth «افزونه Chrome» آن درستی‌سنجی را تکمیل می‌کنید.
  • باید ناشر مورد «نت‌بازار Chrome» باشید. درباره مدیریت دسترسی در «داشبورد توسعه‌دهندگان نت‌بازار Chrome» بیشتر بدانید.

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

توجه: پس‌از اعطای دسترسی به حسابتان، چند دقیقه صبر کنید و سپس فرایند درستی‌سنجی را تکمیل کنید.

اگر درستی‌سنجی موفقیت‌آمیز باشد، اعلانی برای تأیید موفقیت‌آمیز بودن فرایند درستی‌سنجی نمایش داده خواهد شد. درغیراین‌صورت، پیام‌واره خطا نشان داده خواهد شد.

برای رفع مشکل درستی‌سنجی ناموفق، موارد زیر را امتحان کنید:

  • مطمئن شوید موردی ثبت‌شده در «داشبورد توسعه‌دهندگان نت‌بازار Chrome» وجود دارد که شناسه موردی یکسان با کارخواه OAuth افزونه Chrome دارد که درحال تکمیل درستی‌سنجی برای آن هستید.
  • مطمئن شوید که ناشر برنامه هستید، یعنی باید یا ناشر فردی برنامه باشید یا عضو ناشر گروه برنامه باشید. درباره مدیریت دسترسی در «داشبورد توسعه‌دهندگان نت‌بازار Chrome» بیشتر بدانید.
  • اگر به‌تازگی فهرست ناشر گروه را به‌روز کرده‌اید، بررسی کنید که فهرست عضویت ناشر گروه در «داشبورد توسعه‌دهندگان نت‌بازار Chrome» همگام‌سازی شده باشد. درباره همگام‌سازی فهرست عضویت ناشر بیشتر بدانید.

بررسی برنامه (فقط iOS)

ویژگی بررسی برنامه بااستفاده از سرویس گواهی برنامه Apple به محافظت از برنامه‌های iOS شما دربرابر استفاده غیرمجاز کمک می‌کند تا درستی‌سنجی کند درخواست‌های ارسالی به نقاط پایانی Google OAuth 2.0 از برنامه‌های معتبر شما منشأ می‌گیرند. این کار به کاهش خطر جعل هویت برنامه کمک می‌کند.

فعال کردن «بررسی برنامه» برای «مشتری iOS»

برای فعال کردن موفقیت‌آمیز «بررسی برنامه» برای کارخواه iOS شما، باید شرایط زیر برآورده شود:
  • باید شناسه تیمی برای کارخواه iOS خود مشخص کنید.
  • نباید از نویسه عام در شناسه دسته‌تان استفاده کنید زیرا می‌تواند به بیش‌از یک برنامه منتهی شود. این یعنی شناسه دسته نباید شامل نماد ستاره (*) باشد.
برای فعال کردن «بررسی برنامه»، دکمه محافظت از کارخواه OAuth دربرابر سوءاستفاده با «بررسی برنامه Firebase» را در نمای ویرایش کارخواه iOS خود روشن کنید.

پس‌از فعال کردن «بررسی برنامه»، شروع به دیدن سنجه‌های مربوط به درخواست‌های OAuth از کارخواه خود در نمای ویرایش کارخواه OAuth خواهید کرد. درخواست‌های منابع درستی‌سنجی‌نشده تا زمانی که «بررسی برنامه» را اجرا نکنید مسدود نخواهند شد. اطلاعات موجود در صفحه پایش سنجه‌ها می‌تواند به شما کمک کند تا زمان شروع اجرای قانون را تعیین کنید.

هنگام فعال کردن «بررسی برنامه» برای برنامه iOS، ممکن است خطاهای مربوط به ویژگی «بررسی برنامه» را ببینید. برای رفع این خطاها، موارد زیر را امتحان کنید:

  • تأیید کنید که شناسه دسته‌ای و شناسه تیمی که مشخص کرده‌اید معتبر هستند.
  • مطمئن شوید که از نویسه عام برای شناسه دسته نرم‌افزاری استفاده نمی‌کنید.

اجرای «بررسی برنامه» برای «مشتری iOS»

فعال کردن «بررسی برنامه» برای برنامه شما به‌طور خودکار درخواست‌های شناسایی‌نشده را مسدود نمی‌کند. برای اعمال کردن این محافظت، به نمای ویرایش مشتری iOS خود بروید. در آنجا، سنجه‌های «بررسی برنامه» را در سمت چپ صفحه در بخش هویت Google برای iOS خواهید دید. این سنجه‌ها شامل اطلاعات زیر است:
  • تعداد درخواست‌های درستی‌سنجی‌شده - درخواست‌هایی که دارای یک کد App Check معتبر هستند. پس‌از اینکه اجرای «بررسی برنامه» را فعال کردید، فقط درخواست‌های این دسته موفق خواهند بود.
  • تعداد درخواست‌های درستی‌سنجی‌نشده: احتمالاً درخواست‌های کارخواه قدیمی - درخواست‌هایی که «نشان App Check» ندارند؛ این درخواست‌ها ممکن است از نسخه قدیمی‌تری از برنامه شما باشد که پیاده‌سازی «بررسی برنامه» ندارد.
  • تعداد درخواست‌های تأییدنشده: درخواست‌های با منبع ناشناخته - درخواست‌هایی که فاقد کد App Check هستند و به‌نظر نمی‌رسد از برنامه شما ارسال شده باشند.
  • تعداد درخواست‌های درستی‌سنجی‌نشده: درخواست‌های نامعتبر - درخواست‌هایی با یک کد App Check نامعتبر، که ممکن است از یک کارخواه غیرمعتبر باشد که تلاش می‌کند خود را به‌جای برنامه شما جا بزند، یا از محیط‌های شبیه‌سازی‌شده باشد.
این سنجه‌ها را مرور کنید تا متوجه شوید که اجرای «بررسی برنامه» چه تأثیری بر کاربران شما خواهد داشت.

برای اعمال «بررسی برنامه»، روی دکمه ENFORCE کلیک کنید و انتخاب خود را تأیید کنید. وقتی اجرا فعال باشد، همه درخواست‌های تأییدنشده از مشتری شما رد خواهد شد.

توجه: پس‌از فعال کردن اجرا، ممکن است تا ۱۵ دقیقه طول بکشد تا تغییرات اعمال شود.

لغو اجرای «بررسی برنامه» برای «کارخواه iOS»

لغو اجرای «بررسی برنامه» برای برنامه‌تان، اجرا را متوقف خواهد کرد و به همه درخواست‌های سرویس‌گیرنده شما به نقاط پایانی Google OAuth 2.0، ازجمله درخواست‌های تأییدنشده، اجازه خواهد داد.

برای لغو اجرای «بررسی برنامه» برای کارخواه iOS، به نمای ویرایش کارخواه iOS بروید و روی دکمه لغو اجرا کلیک کنید و انتخابتان را تأیید کنید.

توجه: پس‌از لغو اجرای «بررسی برنامه»، ممکن است تا ۱۵ دقیقه طول بکشد تا تغییرات اعمال شود.

غیرفعال کردن «بررسی برنامه» برای «کاربر iOS»

غیرفعال کردن «بررسی برنامه» برای برنامه‌تان، همه نظارت‌ها و اجراهای «بررسی برنامه» را متوقف خواهد کرد. به‌جای آن، App Check را غیرفعال کنید تا بتوانید به نظارت بر سنجه‌های کارخواهتان ادامه دهید.

برای غیرفعال کردن «بررسی برنامه» برای کارخواه iOS، به نمای ویرایش کارخواه iOS بروید و دکمه مبدل محافظت از کارخواه OAuth دربرابر سوءاستفاده با «بررسی برنامه Firebase» را خاموش کنید.

توجه: پس‌از غیرفعال کردن App Check، ممکن است تا ۱۵ دقیقه طول بکشد تا تغییرات اعمال شود.

دسترسی زمان‌محور

دسترسی زمان‌محور به کاربر اجازه می‌دهد برای مدت محدودی به برنامه شما اجازه دسترسی به داده‌هایش را بدهد تا کنشی را تکمیل کند. دسترسی زمان‌محور در محصولات منتخب Google درطول جریان رضایت دردسترس است و به کاربران این امکان را می‌دهد که دسترسی را برای مدت محدودی اعطا کنند. یک نمونه از این ابزارها Data Portability API است که امکان انتقال یک‌باره داده‌ها را فراهم می‌کند.

وقتی کاربری به برنامه شما دسترسی زمان‌دار اعطا می‌کند، ژتون بازآوری پس‌از مدت مشخص‌شده منقضی می‌شود. توجه داشته باشید که ژتون‌های بازآوری ممکن است در شرایط خاصی زودتر باطل شوند؛ برای جزئیات بیشتر، این موارد را ببینید. فیلد refresh_token_expires_in که در پاسخ تبادل کد مجوز برگردانده می‌شود، در این موارد نشان‌دهنده زمان باقی‌مانده تا انقضای ژتون بازآوری است.

مطالعه بیشتر

«روال مطلوب فعلی» IETF با عنوان OAuth 2.0 برای برنامه‌های بومی بسیاری از روال‌های مطلوب مستندشده در اینجا را ایجاد می‌کند.

پیاده‌سازی «محافظت بین‌حسابی»

اقدام دیگری که باید برای محافظت از حساب‌های کاربرانتان انجام دهید، پیاده‌سازی «محافظت بین‌حسابی» بااستفاده از «سرویس محافظت بین‌حسابی» Google است. این سرویس به شما امکان می‌دهد در اعلان‌های رویداد امنیتی مشترک شوید که اطلاعاتی درباره تغییرات عمده در حساب کاربر به برنامه‌تان ارائه می‌دهد. سپس می‌توانید از این اطلاعات برای اقدام کردن براساس نحوه تصمیم‌گیری‌تان برای پاسخ به رویدادها استفاده کنید.

برخی‌از انواع رویدادهایی که «سرویس محافظت بین‌حسابی Google» به برنامه شما ارسال می‌کند عبارت‌اند از:

  • 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

برای کسب اطلاعات بیشتر درباره نحوه پیاده‌سازی «محافظت بین‌حسابی» و فهرست کامل رویدادهای دردسترس، به صفحه «محافظت از حساب‌های کاربری با محافظت بین‌حسابی» مراجعه کنید.