ثبت‌نام با OAuth2 گوگل در وب

برای استفاده از OAuth گوگل نیاز به هیچ پکیج و کامپوننتی ندارید و تفاوتی نمی‌کند که از چه زبان برنامه‌نویسی استفاده می‌کنید.

ثبت نام و لاگین با گوگل شامل سه مرحله اصلی می‌شود:

  • دریافت کد از گوگل که به معنای Grant Access می‌باشد.
  • دریافت Access Token که با استفاده از کد دریافتی انجام می‌شود.
  • دریافت اطلاعات اکونت گوگل شخص که با استفاده از Access Token انجام می‌شود.

اطلاعات بیشتر در این صفحه گوگل موجود می‌باشد: Google OAuth2

برای تمامی مراحل بالا گوگل Api های لازم را در اختیار ما گذاشته که در ادامه به آن خواهیم پرداخت.

در ابتدا به یک اکونت گوگل نیاز داریم که می‌توانید از این روش آن را بسازید: ساخت Credentionals برای Google OAuth2

حالا شما client_id, client_secret و redirect_uri را ساخته‌اید و می‌توانید با Grant Access Api را از طریق Curl یا به هر روش دیگر کال کنید.

curl --location --request GET 'https://accounts.google.com/o/oauth2/v2/auth?client_id=MY_CLIENT_ID_EXAMPLE&redirect_uri=MY_REDIRECT_URI_EXAMPLE&scope=https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile&response_type=code'

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

https://www.googleapis.com/auth/userinfo.email
https://www.googleapis.com/auth/userinfo.profile

اگر این request را از طریق یک browser انجام دهید خواهید دید که شما را به یک صفحه redirect_uri‌ هدایت می‌کند و از شما می‌خواهد تا اکونت گوگل خود را انتخاب کنید و آن را Sign In کنید و سپس در آدرس redirect_uri‌ به شما code تحویل داده می‌شود. این کد در مرحله بعد استفاده خواهد شد.

تا این مرحله که از client_secret استفاده نشده‌ است نیاز به اعمال مسایل امنیتی نیست و شما می‌توانید از طریق بخش Frontend یا هر سیستم دیگری code را دریافت کنید. اما مراحل بعدی بهتر است در سمت Server انجام بپذیرد.

حال برای دریافت access token از request زیر استفاده کنید.

curl --location --request POST 'https://accounts.google.com/o/oauth2/token' \
--header 'Cache-Control: no-cache' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'client_id=MY_CLIENT_ID_EXAMPLE' \
--data-urlencode 'client_secret=MY_CLEINT_SECRET' \
--data-urlencode 'code=MY_CODE_EXAMPLE_FROM_PREVIOUS_STEP' \
--data-urlencode 'redirect_uri=MY_REDIRECT_URI' \
--data-urlencode 'grant_type=authorization_code'

دقت کنید که code دریافتی را ابتدا حتما Decode کنید و بعد ارسال کنید در واقع کد ارسالی در request بالا باید چیزی شبیه به

 4/0AX4XfWhyiChTJDNi41X_6F1g0yZ3uFTR1HFvUVoN3e3h-R0voxomoOrHTuaqPamUHVP-aw 

باشد.

نتیجه این request به شکل زیر است:

حال شما access token را دارید و می‌توانید برای دریافت اطلاعات کاربر مورد نظر api سوم را کال کنید.

curl --location --request GET 'https://www.googleapis.com/oauth2/v2/userinfo' \
--header 'Authorization: Bearer ya29.A0ARrdaM8aMvnCEzbo5yOfFf_uFSdFnh5SqAZmahTC2ykHKOYTu6XkU-_k0msMgtA1HYC_lrK8y1gFyH-rX5SPGnhldL56zdGVoUVOE8V_r3kkb-38QNCCn4zvpcDkriQaAskqnFwXpWuZE00MZIPZkibHgtKq'

نیتجه این request بصورت زیر دریافت می‌شود.

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

شما اطلاعات مورد نظر خود را در اختیار دارید.

پایان.