لینک‌دهی ساده با OAuth و ورود با گوگل

نمای کلی

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

برای انجام لینک کردن حساب کاربری با OAuth و ورود با گوگل، این مراحل کلی را دنبال کنید:

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

شکل ۱. اتصال حساب کاربری روی گوشی کاربر با استفاده از قابلیت اتصال ساده

الزامات مربوط به لینک‌سازی ساده

  • جریان لینک‌دهی اولیه OAuth وب را پیاده‌سازی کنید. سرویس شما باید از نقاط پایانی مجوزدهی و تبادل توکن سازگار با OAuth 2.0 پشتیبانی کند.
  • نقطه پایانی تبادل توکن شما باید از ادعاهای JSON Web Token (JWT) پشتیبانی کند و اهداف check ، create و get را پیاده‌سازی کند.

سرور OAuth خود را پیاده‌سازی کنید

نقطه پایانی تبادل توکن شما باید از اهداف check ، create و get پشتیبانی کند. برای تکمیل جریان اتصال حساب و یادگیری زمان استفاده از اهداف مختلف، این مراحل را دنبال کنید:

  1. آیا کاربر در سیستم احراز هویت شما حساب کاربری دارد؟ (کاربر با انتخاب بله یا خیر تصمیم می‌گیرد)
    1. بله: آیا کاربر از ایمیل مرتبط با حساب گوگل خود برای ورود به پلتفرم شما استفاده می‌کند؟ (کاربر با انتخاب بله یا خیر تصمیم می‌گیرد)
      1. بله: آیا کاربر در سیستم احراز هویت شما حساب کاربری منطبقی دارد؟ ( check intent ، تأیید است)
        1. بله: اگر get intent با موفقیت برگردد، get intent فراخوانی می‌شود و حساب کاربری مرتبط می‌شود.
        2. خیر: ایجاد حساب کاربری جدید؟ (کاربر با انتخاب بله یا خیر تصمیم می‌گیرد)
          1. بله: در صورت موفقیت آمیز بودن create intent ، تابع create intent فراخوانی شده و حساب کاربری لینک می‌شود.
          2. خیر: جریان Web OAuth فعال می‌شود، کاربر به مرورگر خود هدایت می‌شود و به کاربر این امکان داده می‌شود که با یک ایمیل دیگر لینک دهد.
      2. خیر: جریان Web OAuth فعال می‌شود، کاربر به مرورگر خود هدایت می‌شود و به کاربر این امکان داده می‌شود که با یک ایمیل دیگر لینک دهد.
    2. خیر: آیا کاربر در سیستم احراز هویت شما حساب کاربری منطبقی دارد؟ (منظور check intent ، تأیید است)
      1. بله: اگر get intent با موفقیت برگردد، get intent فراخوانی می‌شود و حساب کاربری مرتبط می‌شود.
      2. خیر: در صورت موفقیت آمیز بودن create intent تابع create intent فراخوانی شده و حساب کاربری لینک می‌شود.

حساب کاربری موجود را بررسی کنید (نیت را بررسی کنید)

پس از رضایت کاربر برای دسترسی به نمایه Google خود، Google درخواستی را ارسال می کند که حاوی تأییدیه امضا شده هویت کاربر Google است. این ادعا حاوی اطلاعاتی است که شامل شناسه حساب Google، نام و آدرس ایمیل کاربر است. نقطه پایانی تبادل توکن که برای پروژه شما پیکربندی شده است، آن درخواست را مدیریت می کند.

اگر حساب Google مربوطه از قبل در سیستم احراز هویت شما وجود داشته باشد، نقطه پایانی مبادله رمز شما با account_found=true پاسخ می‌دهد. اگر حساب Google با کاربر موجود مطابقت نداشته باشد، نقطه پایانی تبادل رمز شما یک خطای HTTP 404 Not Found با account_found=false را برمی‌گرداند.

درخواست دارای فرم زیر است:

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

grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&intent=check&assertion=JWT&scope=SCOPES&client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET

نقطه پایانی تبادل توکن شما باید بتواند پارامترهای زیر را مدیریت کند:

پارامترهای نقطه پایانی رمز
intent برای این درخواست ها، مقدار این پارامتر check می شود.
grant_type نوع توکن رد و بدل شده برای این درخواست‌ها، این پارامتر دارای مقدار urn:ietf:params:oauth:grant-type:jwt-bearer .
assertion یک نشانه وب JSON (JWT) که تأیید امضا شده ای از هویت کاربر Google ارائه می دهد. JWT حاوی اطلاعاتی است که شامل شناسه حساب Google، نام و آدرس ایمیل کاربر است.
client_id شناسه مشتری که به Google اختصاص داده اید.
client_secret راز مشتری که به Google اختصاص داده اید.

برای پاسخ به درخواست‌های قصد check ، نقطه پایانی مبادله رمز شما باید مراحل زیر را انجام دهد:

  • تایید و رمزگشایی ادعای JWT.
  • بررسی کنید که آیا حساب Google از قبل در سیستم احراز هویت شما وجود دارد یا خیر.
تایید و رمزگشایی ادعای JWT

می‌توانید با استفاده از کتابخانه رمزگشایی JWT برای زبان خود، ادعای JWT را تأیید و رمزگشایی کنید. از کلیدهای عمومی Google که در قالب‌های JWK یا PEM موجود است برای تأیید امضای توکن استفاده کنید.

هنگام رمزگشایی، ادعای JWT مانند مثال زیر است:

{
  "sub": "1234567890",      // The unique ID of the user's Google Account
  "iss": "https://accounts.google.com",        // The assertion's issuer
  "aud": "123-abc.apps.googleusercontent.com", // Your server's client ID
  "iat": 233366400,         // Unix timestamp of the assertion's creation time
  "exp": 233370000,         // Unix timestamp of the assertion's expiration time
  "name": "Jan Jansen",
  "given_name": "Jan",
  "family_name": "Jansen",
  "email": "jan@gmail.com", // If present, the user's email address
  "email_verified": true,   // true, if Google has verified the email address
  "hd": "example.com",      // If present, the host domain of the user's GSuite email address
                            // If present, a URL to user's profile picture
  "picture": "https://lh3.googleusercontent.com/a-/AOh14GjlTnZKHAeb94A-FmEbwZv7uJD986VOF1mJGb2YYQ",
  "locale": "en_US"         // User's locale, from browser or phone settings
}

علاوه بر تأیید امضای رمز، تأیید کنید که صادرکننده ادعا (فیلد iss ) https://accounts.google.com باشد، مخاطب (فیلد aud ) شناسه مشتری اختصاص داده شده شما باشد، و اینکه نشانه منقضی نشده باشد ( exp میدان).

با استفاده از فیلدهای email ، email_verified و hd می‌توانید تعیین کنید که آیا Google میزبان آدرس ایمیل است یا خیر. در مواردی که Google معتبر است، کاربر در حال حاضر مالک قانونی حساب است و ممکن است از گذرواژه یا روش‌های چالش دیگر صرف نظر کنید. در غیر این صورت، می توان از این روش ها برای تأیید حساب قبل از پیوند استفاده کرد.

مواردی که گوگل معتبر است:

  • email دارای پسوند @gmail.com است، این یک حساب کاربری جیمیل است.
  • email_verified درست است و hd تنظیم شده است، این یک حساب G Suite است.

کاربران می توانند بدون استفاده از Gmail یا G Suite برای حساب های Google ثبت نام کنند. وقتی email حاوی پسوند @gmail.com نیست و hd وجود ندارد، گوگل معتبر نیست و رمز عبور یا روش‌های چالش دیگری برای تأیید کاربر توصیه می‌شود. email_verified همچنین می تواند درست باشد زیرا Google در ابتدا کاربر را هنگام ایجاد حساب Google تأیید کرد، اما مالکیت حساب ایمیل شخص ثالث ممکن است از آن زمان تغییر کرده باشد.

بررسی کنید که آیا حساب Google از قبل در سیستم احراز هویت شما وجود دارد یا خیر

بررسی کنید که آیا یکی از شرایط زیر درست است یا خیر:

  • شناسه حساب Google که در قسمت sub ادعا یافت می‌شود، در پایگاه داده کاربر شما قرار دارد.
  • آدرس ایمیل در ادعا با کاربر در پایگاه داده کاربر شما مطابقت دارد.

اگر هر یک از شرایط صحیح باشد، کاربر قبلاً ثبت نام کرده است. در این صورت، پاسخی مانند زیر را برگردانید:

HTTP/1.1 200 Success
Content-Type: application/json;charset=UTF-8

{
  "account_found":"true",
}

اگر نه شناسه حساب Google و نه آدرس ایمیل مشخص شده در ادعا با کاربر موجود در پایگاه داده شما مطابقت ندارد، کاربر هنوز ثبت نام نکرده است. در این مورد، نقطه پایانی تبادل توکن شما باید با یک خطای HTTP 404 پاسخ دهد که "account_found": "false" ، مانند مثال زیر:

HTTP/1.1 404 Not found
Content-Type: application/json;charset=UTF-8

{
  "account_found":"false",
}

مدیریت پیوند خودکار (دریافت قصد)

پس از رضایت کاربر برای دسترسی به نمایه Google خود، Google درخواستی را ارسال می کند که حاوی تأییدیه امضا شده هویت کاربر Google است. این ادعا حاوی اطلاعاتی است که شامل شناسه حساب Google، نام و آدرس ایمیل کاربر است. نقطه پایانی تبادل توکن که برای پروژه شما پیکربندی شده است، آن درخواست را مدیریت می کند.

اگر حساب Google مربوطه از قبل در سیستم احراز هویت شما وجود داشته باشد، نقطه پایانی مبادله رمز شما رمزی را برای کاربر برمی‌گرداند. اگر حساب Google با کاربر موجود مطابقت نداشته باشد، نقطه پایانی تبادل رمز شما یک خطای linking_error و login_hint اختیاری را برمی‌گرداند.

درخواست دارای فرم زیر است:

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

grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&intent=get&assertion=JWT&scope=SCOPES&client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET

نقطه پایانی تبادل توکن شما باید بتواند پارامترهای زیر را مدیریت کند:

پارامترهای نقطه پایانی رمز
intent برای این درخواست ها، مقدار این پارامتر get است.
grant_type نوع توکن رد و بدل شده برای این درخواست‌ها، این پارامتر دارای مقدار urn:ietf:params:oauth:grant-type:jwt-bearer .
assertion یک نشانه وب JSON (JWT) که تأیید امضا شده ای از هویت کاربر Google ارائه می دهد. JWT حاوی اطلاعاتی است که شامل شناسه حساب Google، نام و آدرس ایمیل کاربر است.
scope اختیاری: هر دامنه ای که Google را برای درخواست از کاربران پیکربندی کرده اید.
client_id شناسه مشتری که به Google اختصاص داده اید.
client_secret راز مشتری که به Google اختصاص داده اید.

برای پاسخ به درخواست‌های get قصد، نقطه پایانی تبادل توکن شما باید مراحل زیر را انجام دهد:

  • تایید و رمزگشایی ادعای JWT.
  • بررسی کنید که آیا حساب Google از قبل در سیستم احراز هویت شما وجود دارد یا خیر.
تایید و رمزگشایی ادعای JWT

می‌توانید با استفاده از کتابخانه رمزگشایی JWT برای زبان خود، ادعای JWT را تأیید و رمزگشایی کنید. از کلیدهای عمومی Google که در قالب‌های JWK یا PEM موجود است برای تأیید امضای توکن استفاده کنید.

هنگام رمزگشایی، ادعای JWT مانند مثال زیر است:

{
  "sub": "1234567890",      // The unique ID of the user's Google Account
  "iss": "https://accounts.google.com",        // The assertion's issuer
  "aud": "123-abc.apps.googleusercontent.com", // Your server's client ID
  "iat": 233366400,         // Unix timestamp of the assertion's creation time
  "exp": 233370000,         // Unix timestamp of the assertion's expiration time
  "name": "Jan Jansen",
  "given_name": "Jan",
  "family_name": "Jansen",
  "email": "jan@gmail.com", // If present, the user's email address
  "email_verified": true,   // true, if Google has verified the email address
  "hd": "example.com",      // If present, the host domain of the user's GSuite email address
                            // If present, a URL to user's profile picture
  "picture": "https://lh3.googleusercontent.com/a-/AOh14GjlTnZKHAeb94A-FmEbwZv7uJD986VOF1mJGb2YYQ",
  "locale": "en_US"         // User's locale, from browser or phone settings
}

علاوه بر تأیید امضای رمز، تأیید کنید که صادرکننده ادعا (فیلد iss ) https://accounts.google.com باشد، مخاطب (فیلد aud ) شناسه مشتری اختصاص داده شده شما باشد، و اینکه نشانه منقضی نشده باشد ( exp میدان).

با استفاده از فیلدهای email ، email_verified و hd می‌توانید تعیین کنید که آیا Google میزبان آدرس ایمیل است یا خیر. در مواردی که Google معتبر است، کاربر در حال حاضر مالک قانونی حساب است و ممکن است از گذرواژه یا روش‌های چالش دیگر صرف نظر کنید. در غیر این صورت، می توان از این روش ها برای تأیید حساب قبل از پیوند استفاده کرد.

مواردی که گوگل معتبر است:

  • email دارای پسوند @gmail.com است، این یک حساب کاربری جیمیل است.
  • email_verified درست است و hd تنظیم شده است، این یک حساب G Suite است.

کاربران می توانند بدون استفاده از Gmail یا G Suite برای حساب های Google ثبت نام کنند. وقتی email حاوی پسوند @gmail.com نیست و hd وجود ندارد، گوگل معتبر نیست و رمز عبور یا روش‌های چالش دیگری برای تأیید کاربر توصیه می‌شود. email_verified همچنین می تواند درست باشد زیرا Google در ابتدا کاربر را هنگام ایجاد حساب Google تأیید کرد، اما مالکیت حساب ایمیل شخص ثالث ممکن است از آن زمان تغییر کرده باشد.

بررسی کنید که آیا حساب Google از قبل در سیستم احراز هویت شما وجود دارد یا خیر

بررسی کنید که آیا یکی از شرایط زیر درست است یا خیر:

  • شناسه حساب Google که در قسمت sub ادعا یافت می‌شود، در پایگاه داده کاربر شما قرار دارد.
  • آدرس ایمیل در ادعا با کاربر در پایگاه داده کاربر شما مطابقت دارد.

اگر حسابی برای کاربر پیدا شد، یک نشانه دسترسی صادر کنید و مقادیر موجود در یک شی JSON را در بدنه پاسخ HTTPS خود بازگردانید، مانند مثال زیر:

{
  "token_type": "Bearer",
  "access_token": "ACCESS_TOKEN",
  "refresh_token": "REFRESH_TOKEN",
  "expires_in": SECONDS_TO_EXPIRATION
}

در برخی موارد، پیوند حساب بر اساس شناسه رمز ممکن است برای کاربر ناموفق باشد. اگر به هر دلیلی این کار را انجام داد، نقطه پایانی تبادل توکن شما باید با یک خطای HTTP 401 پاسخ دهد که error=linking_error را مشخص می‌کند، همانطور که در مثال زیر نشان می‌دهد:

HTTP/1.1 401 Unauthorized
Content-Type: application/json;charset=UTF-8

{
  "error":"linking_error",
  "login_hint":"foo@bar.com"
}

وقتی Google یک پاسخ خطای 401 با linking_error دریافت می‌کند، Google کاربر را با login_hint به عنوان پارامتر به نقطه پایانی مجوز شما می‌فرستد. کاربر پیوند حساب را با استفاده از جریان پیوند OAuth در مرورگر خود تکمیل می کند.

مدیریت ایجاد حساب کاربری با استفاده از ورود با گوگل (create intent)

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

درخواست دارای فرم زیر است:

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

response_type=token&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=SCOPES&intent=create&assertion=JWT&client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET

نقطه پایانی تبادل توکن شما باید بتواند پارامترهای زیر را مدیریت کند:

پارامترهای نقطه پایانی توکن
intent برای این درخواست‌ها، مقدار این پارامتر create است.
grant_type نوع توکنی که مبادله می‌شود. برای این درخواست‌ها، این پارامتر دارای مقدار urn:ietf:params:oauth:grant-type:jwt-bearer .
assertion یک توکن وب JSON (JWT) که یک تأیید امضا شده از هویت کاربر گوگل ارائه می‌دهد. JWT حاوی اطلاعاتی است که شامل شناسه حساب گوگل، نام و آدرس ایمیل کاربر می‌شود.
client_id شناسه کلاینتی که به گوگل اختصاص داده‌اید.
client_secret راز کلاینتی که به گوگل اختصاص داده‌اید.

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

برای پاسخ به درخواست‌های create intent، نقطه پایانی تبادل توکن شما باید مراحل زیر را انجام دهد:

  • اعتبارسنجی و رمزگشایی ادعای JWT.
  • اطلاعات کاربر را اعتبارسنجی کنید و حساب کاربری جدید ایجاد کنید.
تایید و رمزگشایی ادعای JWT

می‌توانید با استفاده از کتابخانه رمزگشایی JWT برای زبان خود، ادعای JWT را تأیید و رمزگشایی کنید. از کلیدهای عمومی Google که در قالب‌های JWK یا PEM موجود است برای تأیید امضای توکن استفاده کنید.

هنگام رمزگشایی، ادعای JWT مانند مثال زیر است:

{
  "sub": "1234567890",      // The unique ID of the user's Google Account
  "iss": "https://accounts.google.com",        // The assertion's issuer
  "aud": "123-abc.apps.googleusercontent.com", // Your server's client ID
  "iat": 233366400,         // Unix timestamp of the assertion's creation time
  "exp": 233370000,         // Unix timestamp of the assertion's expiration time
  "name": "Jan Jansen",
  "given_name": "Jan",
  "family_name": "Jansen",
  "email": "jan@gmail.com", // If present, the user's email address
  "email_verified": true,   // true, if Google has verified the email address
  "hd": "example.com",      // If present, the host domain of the user's GSuite email address
                            // If present, a URL to user's profile picture
  "picture": "https://lh3.googleusercontent.com/a-/AOh14GjlTnZKHAeb94A-FmEbwZv7uJD986VOF1mJGb2YYQ",
  "locale": "en_US"         // User's locale, from browser or phone settings
}

علاوه بر تأیید امضای رمز، تأیید کنید که صادرکننده ادعا (فیلد iss ) https://accounts.google.com باشد، مخاطب (فیلد aud ) شناسه مشتری اختصاص داده شده شما باشد، و اینکه نشانه منقضی نشده باشد ( exp میدان).

با استفاده از فیلدهای email ، email_verified و hd می‌توانید تعیین کنید که آیا Google میزبان آدرس ایمیل است یا خیر. در مواردی که Google معتبر است، کاربر در حال حاضر مالک قانونی حساب است و ممکن است از گذرواژه یا روش‌های چالش دیگر صرف نظر کنید. در غیر این صورت، می توان از این روش ها برای تأیید حساب قبل از پیوند استفاده کرد.

مواردی که گوگل معتبر است:

  • email دارای پسوند @gmail.com است، این یک حساب کاربری جیمیل است.
  • email_verified درست است و hd تنظیم شده است، این یک حساب G Suite است.

کاربران می توانند بدون استفاده از Gmail یا G Suite برای حساب های Google ثبت نام کنند. وقتی email حاوی پسوند @gmail.com نیست و hd وجود ندارد، گوگل معتبر نیست و رمز عبور یا روش‌های چالش دیگری برای تأیید کاربر توصیه می‌شود. email_verified همچنین می تواند درست باشد زیرا Google در ابتدا کاربر را هنگام ایجاد حساب Google تأیید کرد، اما مالکیت حساب ایمیل شخص ثالث ممکن است از آن زمان تغییر کرده باشد.

اعتبارسنجی اطلاعات کاربر و ایجاد حساب کاربری جدید

بررسی کنید که آیا هر یک از شرایط زیر درست است یا خیر:

  • شناسه حساب گوگل، که در فیلد sub ادعا یافت می‌شود، در پایگاه داده کاربر شما قرار دارد.
  • آدرس ایمیل موجود در ادعا با یک کاربر در پایگاه داده کاربر شما مطابقت دارد.

اگر هر یک از شرایط درست باشد، از کاربر بخواهید حساب کاربری فعلی خود را به حساب گوگل خود متصل کند. برای انجام این کار، به درخواست با خطای HTTP 401 پاسخ دهید که error=linking_error مشخص می‌کند و آدرس ایمیل کاربر را به عنوان login_hint ارائه می‌دهد. در زیر یک پاسخ نمونه آمده است:

HTTP/1.1 401 Unauthorized
Content-Type: application/json;charset=UTF-8

{
  "error":"linking_error",
  "login_hint":"foo@bar.com"
}

وقتی گوگل یک پاسخ خطای ۴۰۱ با linking_error دریافت می‌کند، کاربر را به نقطه پایانی احراز هویت شما با پارامتر login_hint ارسال می‌کند. کاربر با استفاده از جریان لینک‌دهی OAuth در مرورگر خود، لینک حساب را تکمیل می‌کند.

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

پس از اتمام ایجاد، یک توکن دسترسی صادر کنید و مقادیر را در یک شیء JSON در بدنه پاسخ HTTPS خود، مانند مثال زیر، برگردانید:

{
  "token_type": "Bearer",
  "access_token": "ACCESS_TOKEN",
  "refresh_token": "REFRESH_TOKEN",
  "expires_in": SECONDS_TO_EXPIRATION
}

شناسه کلاینت API گوگل خود را دریافت کنید

در طول فرآیند ثبت نام اتصال حساب، از شما خواسته می‌شود که شناسه کلاینت API گوگل خود را ارائه دهید.

برای دریافت شناسه کلاینت API خود با استفاده از پروژه‌ای که هنگام تکمیل مراحل OAuth Linking ایجاد کرده‌اید، مراحل زیر را انجام دهید:

  1. به صفحه مشتریان بروید.
  2. یک پروژه Google APIs ایجاد یا انتخاب کنید.

    اگر پروژه شما برای نوع برنامه وب، شناسه کلاینت ندارد، برای ایجاد آن روی «ایجاد کلاینت» کلیک کنید. حتماً دامنه سایت خود را در کادر «منشأ جاوا اسکریپت مجاز» (Authorized JavaScript origins) وارد کنید. هنگام انجام آزمایش‌ها یا توسعه محلی، باید هم http://localhost و هم http://localhost:<port_number> را به فیلد «منشأ جاوا اسکریپت مجاز» اضافه کنید.

اعتبارسنجی پیاده‌سازی شما

شما می‌توانید پیاده‌سازی خود را با استفاده از ابزار OAuth 2.0 Playground اعتبارسنجی کنید.

در ابزار، مراحل زیر را انجام دهید:

  1. برای باز کردن پنجره پیکربندی OAuth 2.0، پیکربندی کلیک کنید.
  2. در فیلد جریان OAuth ، گزینه Client-side را انتخاب کنید.
  3. در فیلد OAuth Endpoints ، گزینه Custom را انتخاب کنید.
  4. نقطه پایانی OAuth 2.0 خود و شناسه کلاینتی که به گوگل اختصاص داده‌اید را در فیلدهای مربوطه مشخص کنید.
  5. در بخش مرحله ۱ ، هیچ محدوده گوگلی را انتخاب نکنید. در عوض، این فیلد را خالی بگذارید یا یک محدوده معتبر برای سرور خود تایپ کنید (یا اگر از محدوده‌های OAuth استفاده نمی‌کنید، یک رشته دلخواه). وقتی کارتان تمام شد، روی Authorize APIs کلیک کنید.
  6. در بخش‌های مرحله ۲ و مرحله ۳ ، جریان OAuth 2.0 را بررسی کنید و تأیید کنید که هر مرحله طبق برنامه عمل می‌کند.

شما می‌توانید پیاده‌سازی خود را با استفاده از ابزار Google Account Linking Demo اعتبارسنجی کنید.

در ابزار، مراحل زیر را انجام دهید:

  1. روی دکمه ورود با گوگل کلیک کنید.
  2. حسابی را که می‌خواهید پیوند دهید انتخاب کنید.
  3. شناسه سرویس را وارد کنید.
  4. به صورت اختیاری یک یا چند محدوده‌ای را که برای دسترسی به آنها درخواست خواهید کرد، وارد کنید.
  5. روی شروع نسخه نمایشی کلیک کنید.
  6. وقتی از شما خواسته شد، تأیید کنید که می‌توانید درخواست پیوند را تأیید یا رد کنید.
  7. تأیید کنید که به پلتفرم خود هدایت می‌شوید.