خطاهای مجوز

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

عیب‌یابی

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

توکن به‌روزرسانی مدام منقضی می‌شود

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

دسترسی رد شد

اگر صفحه رضایت OAuth خود را در Google Cloud تنظیم کرده باشید و نوع کاربر External باشد، در صورت تلاش برای اتصال حساب کاربری با یک حساب گوگل که به عنوان کاربر آزمایشی برای برنامه شما فهرست نشده است، خطای "دسترسی ممنوع" دریافت خواهید کرد. حتماً حساب گوگل را به بخش کاربران آزمایشی در صفحه رضایت OAuth خود اضافه کنید.

خطای مدیر ارتباطات شرکا (PCM)

برای راهنمایی در مورد هرگونه خطایی که هنگام دسترسی به PCM با آن مواجه می‌شوید، به مرجع خطای مدیر ارتباطات شرکا (PCM) مراجعه کنید.

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

رابط برنامه‌نویسی کاربردی SDM از یک دامنه محدود استفاده می‌کند، به این معنی که هر برنامه‌ای که در طول فرآیند احراز هویت از این دامنه استفاده کند، «تأیید نشده» خواهد بود، مگر اینکه تأیید رابط برنامه‌نویسی کاربردی OAuth تکمیل شود. هنگام استفاده Device Access برای استفاده شخصی، تأیید API OAuth لازم نیست.

ممکن است در طول فرآیند مجوزدهی، صفحه‌ای با عنوان «Google has not verified this app» مشاهده کنید که اگر محدوده sdm.service در صفحه رضایت OAuth شما در Google Cloud پیکربندی نشده باشد، ظاهر می‌شود. این صفحه را می‌توان با کلیک روی گزینه Advanced و سپس کلیک روی Go to Project Name (unsafe) دور زد.

برای اطلاعات بیشتر به صفحه برنامه تأیید نشده مراجعه کنید.

کلاینت نامعتبر

هنگام تلاش برای دریافت توکن دسترسی یا به‌روزرسانی، در صورت ارائه رمز کلاینت OAuth 2.0 نادرست، خطای "سرویس‌گیرنده نامعتبر" دریافت خواهید کرد. مطمئن شوید که مقدار client_secret که در فراخوانی‌های توکن دسترسی و به‌روزرسانی استفاده می‌کنید، همان مقداری است که برای شناسه کلاینت OAuth 2.0 مورد استفاده قرار می‌گیرد، همانطور که در صفحه اعتبارنامه‌های Google Cloud شما موجود است.

درخواست نامعتبر، محدوده مورد نیاز وجود ندارد

پس از اعطای مجوزها در PCM، ممکن است با خطای «درخواست نامعتبر» با عنوان «پارامتر مورد نیاز موجود نیست: دامنه» مواجه شوید. مطمئن شوید که مقدار scope که در فراخوانی‌های مجوز استفاده می‌کنید، همان مقداری است که برای OAuth 2.0 Client تنظیم کرده‌اید، همانطور که در صفحه اعتبارنامه‌های Google Cloud شما موجود است.

عدم تطابق uri در ریدایرکت

هنگام احراز هویت، ممکن است با خطای "عدم تطابق uri تغییر مسیر" مواجه شوید. مطمئن شوید که مقدار redirect_uri که در فراخوانی‌های احراز هویت استفاده می‌کنید، همان مقداری است که برای کلاینت OAuth 2.0 تنظیم کرده‌اید، همانطور که در صفحه اعتبارنامه‌های Google Cloud شما موجود است.

مرجع سریع

از این مرجع برای پیاده‌سازی سریع مراحل تأیید اعتبار استفاده کنیدuser و حساب گوگل آنها را لینک کنید.

برای استفاده از این مرجع سریع، هر متغیر placeholder را در نمونه‌های کد با مقادیر مربوط به ادغام خاص خود ویرایش کنید و در صورت نیاز کپی و جایگذاری کنید:

۱ عدد PCM

هدایت user به لینک PCM در برنامه شما، به جای:

  1. project-id با شما Device Access Project شناسه
  2. oauth2-client-id با شناسه کلاینت OAuth2 از اعتبارنامه‌های Google Cloud شما
  3. redirect-uri با یک Redirect URI مشخص شده برای OAuth2 Client ID که استفاده می‌کنید
  4. scope با یکی از اسکوپ‌های موجود شما
https://nestservices.google.com/partnerconnections/project-id/auth?redirect_uri=redirect-uri&access_type=offline&prompt=consent&client_id=oauth2-client-id&response_type=code&scope=https://www.googleapis.com/auth/scope

۲ کد تایید

پس از اعطای مجوزها از طریق PCM برای محدوده انتخابی شما، user باید به آدرس اینترنتی (URI) تغییر مسیر مشخص شده شما هدایت شود. کد مجوز به عنوان پارامتر code در URL برگردانده می‌شود که باید به این فرمت باشد:

redirect-uri?code=authorization-code&scope=https://www.googleapis.com/auth/scope

۳ توکن دسترسی

از کد مجوز برای بازیابی یک توکن دسترسی استفاده کنید که می‌توانید از آن برای فراخوانی API SDM از طرف کاربر استفاده کنید.

یک فراخوانی POST به نقطه پایانی OAuth گوگل انجام دهید و موارد زیر را جایگزین کنید:

  1. oauth2-client-id و oauth2-client-secret به همراه OAuth2 Client ID و Client Secret از اعتبارنامه‌های Google Cloud شما
  2. authorization-code با کدی که در مرحله قبل دریافت کردید
  3. redirect-uri با یک Redirect URI مشخص شده برای OAuth2 Client ID که استفاده می‌کنید

Google OAuth دو توکن برمی‌گرداند، یک توکن دسترسی و یک توکن به‌روزرسانی.

درخواست

curl -L -X POST 'https://www.googleapis.com/oauth2/v4/token?client_id=oauth2-client-id&client_secret=oauth2-client-secret&code=authorization-code&grant_type=authorization_code&redirect_uri=redirect-uri'

پاسخ

{
  "access_token": "access-token",
  "expires_in": 3599,
  "refresh_token": "refresh-token",
  "scope": "https://www.googleapis.com/auth/scope",
  "token_type": "Bearer"
}

۴ فراخوانی API

تا زمانی که یک فراخوانی API با آن انجام ندهید، مجوزدهی کامل نشده است. userتوکن دسترسی. این فراخوانی اولیه، فرآیند مجوزدهی را به پایان می‌رساند و رویدادها را فعال می‌کند.

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

خدمات sdm

دستگاه‌ها

برای اطلاعات بیشتر به مرجع API devices.list مراجعه کنید.

curl -X GET 'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices' \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer access-token'

۵ توکن تازه‌سازی

همانطور که در پارامتر expires_in برگردانده شده توسط Google OAuth ذکر شده است، توکن‌های دسترسی برای SDM API فقط به مدت ۱ ساعت معتبر هستند. اگر توکن دسترسی شما منقضی شد، از توکن refresh برای دریافت توکن جدید استفاده کنید.

یک فراخوانی POST به نقطه پایانی OAuth گوگل انجام دهید و موارد زیر را جایگزین کنید:

  1. oauth2-client-id و oauth2-client-secret به همراه OAuth2 Client ID و Client Secret از اعتبارنامه‌های Google Cloud شما
  2. refresh-token با کدی که هنگام دریافت اولیه‌ی access token دریافت کردید.

Google OAuth یک توکن دسترسی جدید برمی‌گرداند.

درخواست

curl -L -X POST 'https://www.googleapis.com/oauth2/v4/token?client_id=oauth2-client-id&client_secret=oauth2-client-secret&refresh_token=refresh-token&grant_type=refresh_token'

پاسخ

{
  "access_token": "new-access-token",
  "expires_in": 3599,
  "scope": "https://www.googleapis.com/auth/scope",
  "token_type": "Bearer"
}