خطاهای مجوز

-placeholder32-10n-placeholder32 l10n- l10n- - l10n-placeholder44 l10n-placeholder46

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

عیب یابی

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

نشانه Refresh همچنان در حال انقضا است

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

دسترسی رد شد

اگر صفحه رضایت OAuth خود را در Google Cloud تنظیم کرده باشید و نوع کاربر خارجی است، اگر بخواهید حساب را با حساب Google پیوند دهید که به عنوان کاربر آزمایشی برای برنامه شما فهرست نشده است، با خطای «دسترسی ممنوع است» دریافت خواهید کرد. . مطمئن شوید که حساب Google را به بخش تست کاربران در صفحه رضایت OAuth خود اضافه کنید.

خطای Partner Connections Manager (PCM).

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

Google این برنامه را تأیید نکرده است

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

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

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

مشتری نامعتبر

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

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

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

تغییر مسیر عدم تطابق uri

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

مرجع دم دست

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

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

1 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

2 کد احراز هویت

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

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

3 رمز دسترسی

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

یک تماس POST با نقطه پایانی OAuth Google برقرار کنید و جایگزین کنید:

  1. oauth2-client-id و oauth2-client-secret با شناسه مشتری OAuth2 و 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"
}

4 تماس API

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

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

sdm.service

دستگاه ها

برای اطلاعات بیشتر به مرجع 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'

5 توکن Refresh

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

یک تماس POST با نقطه پایانی OAuth Google برقرار کنید و جایگزین کنید:

  1. oauth2-client-id و oauth2-client-secret با شناسه مشتری OAuth2 و Client Secret از اعتبارنامه Google Cloud شما
  2. refresh-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"
}