برای پشتیبانی از جریان ضمنی OAuth 2.0، سرویس شما یک نقطه پایانی مجوزدهی را از طریق HTTPS در دسترس قرار میدهد. این نقطه پایانی مسئول احراز هویت و اخذ رضایت از کاربران برای دسترسی به دادهها است. نقطه پایانی مجوزدهی، یک رابط کاربری ورود به سیستم را به کاربرانی که هنوز وارد سیستم نشدهاند، ارائه میدهد و رضایت آنها را برای دسترسی درخواستی ثبت میکند.
وقتی یک برنامه گوگل نیاز به فراخوانی یکی از APIهای مجاز سرویس شما دارد، گوگل از این نقطه پایانی برای دریافت مجوز از کاربران شما برای فراخوانی این APIها از طرف آنها استفاده میکند.
لینک کردن حساب گوگل: جریان ضمنی OAuth
نمودار توالی زیر، جزئیات تعاملات بین کاربر، گوگل و نقاط پایانی سرویس شما را نشان میدهد.
نقشها و مسئولیتها
جدول زیر نقشها و مسئولیتهای بازیگران در جریان ضمنی OAuth لینکینگ حساب گوگل (GAL) را تعریف میکند. توجه داشته باشید که در GAL، گوگل به عنوان کلاینت OAuth عمل میکند، در حالی که سرویس شما به عنوان ارائهدهنده هویت/سرویس عمل میکند.
| بازیگر / جزء | نقش GAL | مسئولیتها |
|---|---|---|
| برنامه/سرور گوگل | کلاینت OAuth | جریان را آغاز میکند، توکن دسترسی را با استفاده از تغییر مسیر مرورگر دریافت میکند و آن را به صورت ایمن برای دسترسی به APIهای سرویس شما ذخیره میکند. |
| نقطه پایانی مجوز شما | سرور احراز هویت | کاربران شما را احراز هویت میکند، رضایت آنها را دریافت میکند و توکنهای دسترسی بلندمدت را مستقیماً برای گوگل صادر میکند. |
| آدرس اینترنتی ریدایرکت گوگل | نقطه پایانی پاسخ به تماس | تغییر مسیر کاربر را از سرویس احراز هویت شما به همراه مقادیر access_token و state در قطعه URL دریافت میکند. |
یک جلسه جریان ضمنی OAuth 2.0 معمولی که توسط گوگل آغاز میشود، جریان زیر را دارد:
- گوگل نقطه پایانی مجوز شما را در مرورگر کاربر باز میکند. کاربر، اگر قبلاً وارد سیستم نشده باشد، وارد سیستم میشود و اگر قبلاً اجازه نداده باشد، به گوگل اجازه میدهد تا به دادههایش با API شما دسترسی پیدا کند.
- سرویس شما یک توکن دسترسی ایجاد میکند و آن را به گوگل برمیگرداند. برای انجام این کار، مرورگر کاربر را به همراه توکن دسترسی متصل به درخواست، به گوگل هدایت کنید.
- گوگل APIهای سرویس شما را فراخوانی میکند و توکن دسترسی را به هر درخواست پیوست میکند. سرویس شما تأیید میکند که توکن دسترسی، مجوز دسترسی به API را به گوگل میدهد و سپس فراخوانی API را تکمیل میکند.
دستور العمل اجرا
برای پیادهسازی جریان ضمنی، این مراحل را دنبال کنید.
مرحله ۱: رسیدگی به درخواستهای مجوز
وقتی گوگل اتصال حساب را آغاز میکند، کاربر را به نقطه پایانی مجوز شما هدایت میکند. برای جزئیات قراردادهای پروتکل و الزامات پارامتر، به نقطه پایانی مجوز مراجعه کنید.
برای مدیریت درخواست، اقدامات زیر را انجام دهید:
اعتبارسنجی درخواست :
- تأیید کنید که
client_idبا Client ID اختصاص داده شده به گوگل مطابقت دارد. - تأیید کنید که
redirect_uriبا آدرس اینترنتی ریدایرکت مورد انتظار گوگل مطابقت دارد:none https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID - Verify that
response_typeistoken.
- تأیید کنید که
احراز هویت کاربر :
- بررسی کنید که آیا کاربر به سرویس شما وارد شده است یا خیر.
- اگر کاربر وارد سیستم نشده است، از او بخواهید مراحل ورود یا ثبتنام شما را تکمیل کند.
تولید توکن دسترسی :
- یک توکن دسترسی منحصر به فرد و غیرقابل حدس مرتبط با کاربر و کلاینت ایجاد کنید.
ریدایرکت مجدد به گوگل :
- مرورگر را به URL ارائه شده در
redirect_uriهدایت کنید. - پارامترهای زیر را در قطعه URL (هش) اضافه کنید:
-
access_token: توکن دسترسی که ایجاد کردهاید. -
token_type: بایدbearerباشد. -
state: مقدار وضعیت اصلاح نشدهای که از گوگل دریافت شده است.
-
- مرورگر را به URL ارائه شده در
رسیدگی به درخواست های اطلاعات کاربر
نقطه پایانی userinfo یک منبع محافظت شده OAuth 2.0 است که ادعاهای مربوط به کاربر پیوند شده را برمیگرداند. پیاده سازی و میزبانی نقطه پایانی اطلاعات کاربر اختیاری است، به جز موارد استفاده زیر:
- ورود به سیستم حساب پیوندی با Google One Tap.
- اشتراک بدون اصطکاک در AndroidTV.
پس از اینکه رمز دسترسی با موفقیت از نقطه پایانی نشانه شما بازیابی شد، Google درخواستی را به نقطه پایانی اطلاعات کاربری شما ارسال می کند تا اطلاعات نمایه اولیه کاربر پیوند داده شده را بازیابی کند.
| سرصفحه های درخواست نقطه پایانی کاربر | |
|---|---|
Authorization header | نشانه دسترسی از نوع Bearer. |
به عنوان مثال، اگر نقطه پایانی اطلاعات کاربری شما در https://myservice.example.com/userinfo در دسترس باشد، ممکن است یک درخواست به شکل زیر باشد:
GET /userinfo HTTP/1.1 Host: myservice.example.com Authorization: Bearer ACCESS_TOKEN
برای اینکه نقطه پایانی اطلاعات کاربری شما به درخواستها رسیدگی کند، مراحل زیر را انجام دهید:
- رمز دسترسی را از سربرگ Authorization استخراج کنید و اطلاعات کاربر مرتبط با نشانه دسترسی را برگردانید.
- اگر رمز دسترسی نامعتبر است، با استفاده از سربرگ پاسخ
WWW-Authenticateخطای غیرمجاز HTTP 401 را برگردانید. در زیر نمونه ای از پاسخ خطای userinfo آورده شده است: اگر یک پاسخ خطای 401 غیرمجاز یا هر پاسخ خطای ناموفق دیگری در طول فرآیند پیوند داده شود، خطا غیرقابل بازیابی خواهد بود، رمز بازیابی شده کنار گذاشته می شود و کاربر باید دوباره فرآیند پیوند را آغاز کند.HTTP/1.1 401 Unauthorized WWW-Authenticate: error="invalid_token", error_description="The Access Token expired"
اگر نشانه دسترسی معتبر است، پاسخ HTTP 200 را با شی JSON زیر در بدنه پاسخ HTTPS برگردانید:
اگر نقطه پایانی اطلاعات کاربری شما یک پاسخ موفقیت آمیز HTTP 200 برگرداند، رمز بازیابی شده و ادعاها در برابر حساب Google کاربر ثبت می شود.{ "sub": "USER_UUID", "email": "EMAIL_ADDRESS", "given_name": "FIRST_NAME", "family_name": "LAST_NAME", "name": "FULL_NAME", "picture": "PROFILE_PICTURE", }پاسخ نقطه پایانی اطلاعات کاربر subیک شناسه منحصر به فرد که کاربر را در سیستم شما شناسایی می کند. emailآدرس ایمیل کاربر. given_nameاختیاری: نام کاربر. family_nameاختیاری: نام خانوادگی کاربر. nameاختیاری: نام کامل کاربر. pictureاختیاری: تصویر نمایه کاربر.