OAuth এবং Google সাইন-ইন এর সাথে স্ট্রীমলাইন লিঙ্কিং

ওভারভিউ

OAuth-ভিত্তিক Google সাইন-ইন স্ট্রীমলাইন লিঙ্কিং OAuth লিঙ্কিংয়ের উপরে Google সাইন-ইন যোগ করে। এটি Google ব্যবহারকারীদের জন্য একটি নিরবচ্ছিন্ন লিঙ্ক করার অভিজ্ঞতা প্রদান করে, এবং এটি অ্যাকাউন্ট তৈরি করতে সক্ষম করে, যা ব্যবহারকারীকে তাদের Google অ্যাকাউন্ট ব্যবহার করে আপনার পরিষেবাতে একটি নতুন অ্যাকাউন্ট তৈরি করতে দেয়।

OAuth এবং Google সাইন-ইন এর সাথে অ্যাকাউন্ট লিঙ্ক করার জন্য, এই সাধারণ পদক্ষেপগুলি অনুসরণ করুন:

  1. প্রথমে ব্যবহারকারীকে তাদের Google প্রোফাইল অ্যাক্সেস করার জন্য সম্মতি দিতে বলুন।
  2. ব্যবহারকারীর অ্যাকাউন্ট বিদ্যমান কিনা তা পরীক্ষা করতে তাদের প্রোফাইলে তথ্য ব্যবহার করুন।
  3. বিদ্যমান ব্যবহারকারীদের জন্য, অ্যাকাউন্টগুলি লিঙ্ক করুন।
  4. আপনি যদি আপনার প্রমাণীকরণ সিস্টেমে Google ব্যবহারকারীর জন্য একটি মিল খুঁজে না পান, তাহলে Google থেকে প্রাপ্ত আইডি টোকেনটি যাচাই করুন। তারপর আপনি আইডি টোকেনে থাকা প্রোফাইল তথ্যের উপর ভিত্তি করে একজন ব্যবহারকারী তৈরি করতে পারেন।
এই চিত্রটি স্ট্রিমলাইন লিঙ্কিং ফ্লো ব্যবহার করে একজন ব্যবহারকারীকে তাদের Google অ্যাকাউন্ট লিঙ্ক করার পদক্ষেপগুলি দেখায়৷ প্রথম স্ক্রিনশট দেখায় কিভাবে একজন ব্যবহারকারী লিঙ্ক করার জন্য আপনার অ্যাপ নির্বাচন করতে পারেন। দ্বিতীয় স্ক্রিনশট ব্যবহারকারীকে নিশ্চিত করতে দেয় যে আপনার পরিষেবাতে তাদের একটি বিদ্যমান অ্যাকাউন্ট আছে কিনা। তৃতীয় স্ক্রিনশট ব্যবহারকারীকে যে Google অ্যাকাউন্টের সাথে লিঙ্ক করতে চায় সেটি নির্বাচন করতে দেয়। চতুর্থ স্ক্রিনশটটি আপনার অ্যাপের সাথে তাদের Google অ্যাকাউন্ট লিঙ্ক করার নিশ্চিতকরণ দেখায়। পঞ্চম স্ক্রিনশটটি Google অ্যাপে একটি সফলভাবে লিঙ্ক করা ব্যবহারকারীর অ্যাকাউন্ট দেখায়।

চিত্র 1 । স্ট্রীমলাইন্ড লিঙ্কিং সহ ব্যবহারকারীর ফোনে অ্যাকাউন্ট লিঙ্ক করা

স্ট্রীমলাইনড লিঙ্কিংয়ের জন্য প্রয়োজনীয়তা

  • মৌলিক ওয়েব OAuth লিঙ্কিং ফ্লো বাস্তবায়ন করুন। আপনার পরিষেবা অবশ্যই OAuth 2.0-সম্মত অনুমোদন এবং টোকেন বিনিময় শেষ পয়েন্ট সমর্থন করবে।
  • আপনার টোকেন এক্সচেঞ্জ এন্ডপয়েন্ট অবশ্যই JSON ওয়েব টোকেন (JWT) দাবী সমর্থন করবে এবং check বাস্তবায়ন করবে, create এবং ইন্টেন্ট get

আপনার OAuth সার্ভার বাস্তবায়ন করুন

আপনার টোকেন এক্সচেঞ্জ এন্ডপয়েন্ট অবশ্যই check , create , ইন্টেন্ট get সমর্থন করবে। নীচেরটি অ্যাকাউন্ট লিঙ্কিং প্রবাহের মাধ্যমে সম্পন্ন হওয়া ধাপগুলি দেখায় এবং বিভিন্ন উদ্দেশ্যগুলি কখন কল করা হয় তা নির্দেশ করে:

  1. ব্যবহারকারীর আপনার প্রমাণীকরণ সিস্টেমে একটি অ্যাকাউন্ট আছে? (ব্যবহারকারী হ্যাঁ বা না নির্বাচন করে সিদ্ধান্ত নেয়)
    1. হ্যাঁ : ব্যবহারকারী কি আপনার প্ল্যাটফর্মে সাইন ইন করতে তাদের Google অ্যাকাউন্টের সাথে যুক্ত ইমেল ব্যবহার করেন? (ব্যবহারকারী হ্যাঁ বা না নির্বাচন করে সিদ্ধান্ত নেয়)
      1. হ্যাঁ : ব্যবহারকারীর কি আপনার প্রমাণীকরণ সিস্টেমে একটি ম্যাচিং অ্যাকাউন্ট আছে? ( check intent নিশ্চিত করতে বলা হয়)
        1. হ্যাঁ: get intent কল করা হয় এবং অভিপ্রায় সফলভাবে ফেরত দিলে অ্যাকাউন্টটি লিঙ্ক করা হয়।
        2. না: নতুন অ্যাকাউন্ট তৈরি করবেন? (ব্যবহারকারী হ্যাঁ বা না নির্বাচন করে সিদ্ধান্ত নেয়)
          1. হ্যাঁ: create intent বলা হয় এবং অ্যাকাউন্ট লিঙ্ক করা হয় যদি ক্রিয়েট ইনটেন্ট সফলভাবে ফিরে আসে।
          2. না : ওয়েব OAuth ফ্লো ট্রিগার হয়, ব্যবহারকারীকে তাদের ব্রাউজারে নির্দেশিত করা হয় এবং ব্যবহারকারীকে একটি ভিন্ন ইমেলের সাথে লিঙ্ক করার বিকল্প দেওয়া হয়।
      2. না : ওয়েব OAuth ফ্লো ট্রিগার হয়, ব্যবহারকারীকে তাদের ব্রাউজারে নির্দেশিত করা হয় এবং ব্যবহারকারীকে একটি ভিন্ন ইমেলের সাথে লিঙ্ক করার বিকল্প দেওয়া হয়।
    2. NO : ব্যবহারকারীর কি আপনার প্রমাণীকরণ সিস্টেমে একটি ম্যাচিং অ্যাকাউন্ট আছে? ( check intent নিশ্চিত করতে বলা হয়)
      1. হ্যাঁ: get intent কল করা হয় এবং অভিপ্রায় সফলভাবে ফেরত দিলে অ্যাকাউন্টটি লিঙ্ক করা হয়।
      2. NO: create intent বলা হয় এবং অ্যাকাউন্ট লিঙ্ক করা হয় যদি ক্রিয়েট ইনটেন্ট সফলভাবে রিটার্ন করে।

একটি বিদ্যমান ব্যবহারকারী অ্যাকাউন্টের জন্য পরীক্ষা করুন (ইন্টেন্ট পরীক্ষা করুন)

ব্যবহারকারী তাদের Google প্রোফাইল অ্যাক্সেস করার জন্য সম্মতি দেওয়ার পরে, Google একটি অনুরোধ পাঠায় যাতে Google ব্যবহারকারীর পরিচয়ের একটি স্বাক্ষরিত দাবি থাকে। দাবীতে এমন তথ্য রয়েছে যা ব্যবহারকারীর Google অ্যাকাউন্ট আইডি, নাম এবং ইমেল ঠিকানা অন্তর্ভুক্ত করে। আপনার প্রকল্পের জন্য কনফিগার করা টোকেন এক্সচেঞ্জ এন্ডপয়েন্ট সেই অনুরোধটি পরিচালনা করে।

যদি সংশ্লিষ্ট Google অ্যাকাউন্টটি ইতিমধ্যেই আপনার প্রমাণীকরণ সিস্টেমে উপস্থিত থাকে, তাহলে আপনার টোকেন এক্সচেঞ্জ এন্ডপয়েন্ট account_found=true সাথে প্রতিক্রিয়া জানায়। যদি Google অ্যাকাউন্টটি একটি বিদ্যমান ব্যবহারকারীর সাথে মেলে না, তাহলে আপনার টোকেন এক্সচেঞ্জ এন্ডপয়েন্ট account_found=false এর সাথে একটি HTTP 404 পাওয়া যায়নি ত্রুটি প্রদান করে।

অনুরোধের নিম্নলিখিত ফর্ম আছে:

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 অ্যাকাউন্টটি ইতিমধ্যে আপনার প্রমাণীকরণ সিস্টেমে উপস্থিত আছে কিনা তা পরীক্ষা করুন।
Validate and decode the JWT assertion

You can validate and decode the JWT assertion by using a JWT-decoding library for your language. Use Google's public keys, available in JWK or PEM formats, to verify the token's signature.

When decoded, the JWT assertion looks like the following example:

{
  "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
}

In addition to verifying the token's signature, verify that the assertion's issuer (iss field) is https://accounts.google.com, that the audience (aud field) is your assigned client ID, and that the token has not expired (exp field).

Using the email, email_verified and hd fields you can determine if Google hosts and is authoritative for an email address. In cases where Google is authoritative the user is currently known to be the legitimate account owner and you may skip password or other challenges methods. Otherwise, these methods can be used to verify the account prior to linking.

Cases where Google is authoritative:

  • email has a @gmail.com suffix, this is a Gmail account.
  • email_verified is true and hd is set, this is a G Suite account.

Users may register for Google Accounts without using Gmail or G Suite. When email does not contain a @gmail.com suffix and hd is absent Google is not authoritative and password or other challenge methods are recommended to verify the user. email_verified can also be true as Google initially verified the user when the Google account was created, however ownership of the third party email account may have since changed.

Google অ্যাকাউন্টটি ইতিমধ্যে আপনার প্রমাণীকরণ সিস্টেমে উপস্থিত আছে কিনা তা পরীক্ষা করুন

নিম্নলিখিত শর্তগুলির মধ্যে কোনটি সত্য কিনা তা পরীক্ষা করুন:

  • দাবীর sub ফিল্ডে পাওয়া Google অ্যাকাউন্ট আইডি আপনার ব্যবহারকারী ডাটাবেসে রয়েছে।
  • দাবীর ইমেল ঠিকানা আপনার ব্যবহারকারী ডাটাবেসের একজন ব্যবহারকারীর সাথে মেলে।

উভয় শর্ত সত্য হলে, ব্যবহারকারী ইতিমধ্যে সাইন আপ করেছেন। এই ক্ষেত্রে, নিম্নলিখিত মত একটি প্রতিক্রিয়া ফেরত দিন:

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 অ্যাকাউন্টটি ইতিমধ্যে আপনার প্রমাণীকরণ সিস্টেমে উপস্থিত আছে কিনা তা পরীক্ষা করুন।
Validate and decode the JWT assertion

You can validate and decode the JWT assertion by using a JWT-decoding library for your language. Use Google's public keys, available in JWK or PEM formats, to verify the token's signature.

When decoded, the JWT assertion looks like the following example:

{
  "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
}

In addition to verifying the token's signature, verify that the assertion's issuer (iss field) is https://accounts.google.com, that the audience (aud field) is your assigned client ID, and that the token has not expired (exp field).

Using the email, email_verified and hd fields you can determine if Google hosts and is authoritative for an email address. In cases where Google is authoritative the user is currently known to be the legitimate account owner and you may skip password or other challenges methods. Otherwise, these methods can be used to verify the account prior to linking.

Cases where Google is authoritative:

  • email has a @gmail.com suffix, this is a Gmail account.
  • email_verified is true and hd is set, this is a G Suite account.

Users may register for Google Accounts without using Gmail or G Suite. When email does not contain a @gmail.com suffix and hd is absent Google is not authoritative and password or other challenge methods are recommended to verify the user. email_verified can also be true as Google initially verified the user when the Google account was created, however ownership of the third party email account may have since changed.

Google অ্যাকাউন্টটি ইতিমধ্যে আপনার প্রমাণীকরণ সিস্টেমে উপস্থিত আছে কিনা তা পরীক্ষা করুন

নিম্নলিখিত শর্তগুলির মধ্যে কোনটি সত্য কিনা তা পরীক্ষা করুন:

  • দাবীর sub ফিল্ডে পাওয়া Google অ্যাকাউন্ট আইডি আপনার ব্যবহারকারী ডাটাবেসে রয়েছে।
  • দাবীর ইমেল ঠিকানা আপনার ব্যবহারকারী ডাটাবেসের একজন ব্যবহারকারীর সাথে মেলে।

যদি ব্যবহারকারীর জন্য একটি অ্যাকাউন্ট পাওয়া যায়, একটি অ্যাক্সেস টোকেন ইস্যু করুন এবং আপনার HTTPS প্রতিক্রিয়ার মূল অংশে একটি JSON অবজেক্টে মানগুলি ফেরত দিন, যেমন নিম্নলিখিত উদাহরণে:

{
  "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 যখন linking_error সহ একটি 401 ত্রুটির প্রতিক্রিয়া পায়, তখন Google একটি প্যারামিটার হিসাবে login_hint সহ ব্যবহারকারীকে আপনার অনুমোদনের শেষ পয়েন্টে পাঠায়। ব্যবহারকারী তাদের ব্রাউজারে OAuth লিঙ্কিং ফ্লো ব্যবহার করে অ্যাকাউন্ট লিঙ্ক করা সম্পূর্ণ করে।

Google সাইন-ইন এর মাধ্যমে অ্যাকাউন্ট তৈরি পরিচালনা করুন (উদ্দেশ্য তৈরি করুন)

যখন একজন ব্যবহারকারীকে আপনার পরিষেবাতে একটি অ্যাকাউন্ট তৈরি করার প্রয়োজন হয়, তখন Google আপনার টোকেন এক্সচেঞ্জ এন্ডপয়েন্টে একটি অনুরোধ করে যা 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) যা Google ব্যবহারকারীর পরিচয়ের একটি স্বাক্ষরিত দাবী প্রদান করে। JWT-তে ব্যবহারকারীর Google অ্যাকাউন্ট আইডি, নাম এবং ইমেল ঠিকানা অন্তর্ভুক্ত তথ্য রয়েছে।
client_id আপনি Google এ যে ক্লায়েন্ট আইডি অ্যাসাইন করেছেন।
client_secret ক্লায়েন্ট সিক্রেট আপনি Google-এ অ্যাসাইন করেছেন।

assertion প্যারামিটারের মধ্যে থাকা JWT-এ ব্যবহারকারীর Google অ্যাকাউন্ট আইডি, নাম এবং ইমেল ঠিকানা রয়েছে, যা আপনি আপনার পরিষেবাতে একটি নতুন অ্যাকাউন্ট তৈরি করতে ব্যবহার করতে পারেন।

create অভিপ্রায়ের অনুরোধে সাড়া দিতে, আপনার টোকেন এক্সচেঞ্জ এন্ডপয়েন্টকে অবশ্যই নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করতে হবে:

  • JWT দাবী যাচাই এবং ডিকোড করুন।
  • ব্যবহারকারীর তথ্য যাচাই করুন এবং নতুন অ্যাকাউন্ট তৈরি করুন।
Validate and decode the JWT assertion

You can validate and decode the JWT assertion by using a JWT-decoding library for your language. Use Google's public keys, available in JWK or PEM formats, to verify the token's signature.

When decoded, the JWT assertion looks like the following example:

{
  "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
}

In addition to verifying the token's signature, verify that the assertion's issuer (iss field) is https://accounts.google.com, that the audience (aud field) is your assigned client ID, and that the token has not expired (exp field).

Using the email, email_verified and hd fields you can determine if Google hosts and is authoritative for an email address. In cases where Google is authoritative the user is currently known to be the legitimate account owner and you may skip password or other challenges methods. Otherwise, these methods can be used to verify the account prior to linking.

Cases where Google is authoritative:

  • email has a @gmail.com suffix, this is a Gmail account.
  • email_verified is true and hd is set, this is a G Suite account.

Users may register for Google Accounts without using Gmail or G Suite. When email does not contain a @gmail.com suffix and hd is absent Google is not authoritative and password or other challenge methods are recommended to verify the user. email_verified can also be true as Google initially verified the user when the Google account was created, however ownership of the third party email account may have since changed.

ব্যবহারকারীর তথ্য যাচাই করুন এবং নতুন অ্যাকাউন্ট তৈরি করুন

নিম্নলিখিত শর্তগুলির মধ্যে কোনটি সত্য কিনা তা পরীক্ষা করুন:

  • দাবীর sub ফিল্ডে পাওয়া Google অ্যাকাউন্ট আইডি আপনার ব্যবহারকারী ডাটাবেসে রয়েছে।
  • দাবীর ইমেল ঠিকানা আপনার ব্যবহারকারী ডাটাবেসের একজন ব্যবহারকারীর সাথে মেলে।

যদি উভয় শর্ত সত্য হয়, ব্যবহারকারীকে তাদের বিদ্যমান অ্যাকাউন্টটি তাদের Google অ্যাকাউন্টের সাথে লিঙ্ক করতে অনুরোধ করুন। এটি করার জন্য, একটি 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"
}

Google যখন linking_error সহ একটি 401 ত্রুটির প্রতিক্রিয়া পায়, তখন Google একটি প্যারামিটার হিসাবে login_hint সহ ব্যবহারকারীকে আপনার অনুমোদনের শেষ পয়েন্টে পাঠায়। ব্যবহারকারী তাদের ব্রাউজারে OAuth লিঙ্কিং ফ্লো ব্যবহার করে অ্যাকাউন্ট লিঙ্ক করা সম্পূর্ণ করে।

যদি কোনো শর্তই সত্য না হয়, JWT-তে দেওয়া তথ্য দিয়ে একটি নতুন ব্যবহারকারী অ্যাকাউন্ট তৈরি করুন। নতুন অ্যাকাউন্টে সাধারণত পাসওয়ার্ড সেট থাকে না। এটি সুপারিশ করা হয় যে আপনি অন্যান্য প্ল্যাটফর্মে Google সাইন-ইন যোগ করুন যাতে ব্যবহারকারীরা আপনার অ্যাপ্লিকেশনের সারফেস জুড়ে Google-এর সাথে লগ ইন করতে সক্ষম হন। বিকল্পভাবে, আপনি ব্যবহারকারীকে একটি লিঙ্ক ইমেল করতে পারেন যা আপনার পাসওয়ার্ড পুনরুদ্ধারের প্রবাহ শুরু করে যাতে ব্যবহারকারীকে অন্য প্ল্যাটফর্মে সাইন ইন করার জন্য একটি পাসওয়ার্ড সেট করার অনুমতি দেয়।

নির্মাণ সম্পন্ন হলে, একটি অ্যাক্সেস টোকেন ইস্যু করুন এবং টোকেন রিফ্রেশ করুন এবং আপনার HTTPS প্রতিক্রিয়ার মূল অংশে একটি JSON অবজেক্টের মানগুলি ফিরিয়ে দিন, যেমন নিম্নলিখিত উদাহরণে:

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

আপনার Google API ক্লায়েন্ট আইডি পান

অ্যাকাউন্ট লিঙ্কিং রেজিস্ট্রেশন প্রক্রিয়া চলাকালীন আপনাকে আপনার Google API ক্লায়েন্ট আইডি প্রদান করতে হবে।

OAuth লিঙ্ক করার ধাপগুলি সম্পূর্ণ করার সময় আপনার তৈরি করা প্রোজেক্ট ব্যবহার করে আপনার API ক্লায়েন্ট আইডি পেতে। এটি করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:

  1. একটি Google APIs প্রকল্প তৈরি করুন বা নির্বাচন করুন৷

    যদি আপনার প্রকল্পের ওয়েব অ্যাপ্লিকেশন প্রকারের জন্য একটি ক্লায়েন্ট আইডি না থাকে, একটি তৈরি করতে ক্লায়েন্ট তৈরি করুন ক্লিক করুন। অনুমোদিত জাভাস্ক্রিপ্ট অরিজিন বক্সে আপনার সাইটের ডোমেন অন্তর্ভুক্ত করতে ভুলবেন না। যখন আপনি স্থানীয় পরীক্ষা বা বিকাশ করেন, তখন আপনাকে অবশ্যই অনুমোদিত জাভাস্ক্রিপ্ট অরিজিন ফিল্ডে http://localhost এবং http://localhost:<port_number> যোগ করতে হবে।

আপনার বাস্তবায়ন যাচাই করা হচ্ছে

আপনি OAuth 2.0 প্লেগ্রাউন্ড টুল ব্যবহার করে আপনার বাস্তবায়ন যাচাই করতে পারেন।

টুলে, নিম্নলিখিত পদক্ষেপগুলি করুন:

  1. OAuth 2.0 কনফিগারেশন উইন্ডো খুলতে কনফিগারেশন ক্লিক করুন।
  2. OAuth প্রবাহ ক্ষেত্রে, ক্লায়েন্ট-সাইড নির্বাচন করুন।
  3. OAuth এন্ডপয়েন্ট ফিল্ডে, কাস্টম নির্বাচন করুন।
  4. সংশ্লিষ্ট ক্ষেত্রগুলিতে আপনার OAuth 2.0 এন্ডপয়েন্ট এবং Google-এর জন্য নির্ধারিত ক্লায়েন্ট আইডি উল্লেখ করুন।
  5. ধাপ 1 বিভাগে, কোনো Google স্কোপ নির্বাচন করবেন না। পরিবর্তে, এই ক্ষেত্রটি ফাঁকা রাখুন বা আপনার সার্ভারের জন্য বৈধ একটি সুযোগ টাইপ করুন (অথবা আপনি যদি OAuth স্কোপ ব্যবহার না করেন তবে একটি নির্বিচারে স্ট্রিং)। আপনার হয়ে গেলে, APIs অনুমোদন করুন ক্লিক করুন।
  6. ধাপ 2 এবং ধাপ 3 বিভাগে, OAuth 2.0 প্রবাহের মধ্য দিয়ে যান এবং যাচাই করুন যে প্রতিটি পদক্ষেপ উদ্দেশ্য অনুযায়ী কাজ করে।

আপনি Google অ্যাকাউন্ট লিঙ্কিং ডেমো টুল ব্যবহার করে আপনার বাস্তবায়ন যাচাই করতে পারেন।

টুলে, নিম্নলিখিত পদক্ষেপগুলি করুন:

  1. সাইন-ইন উইথ গুগল বোতামে ক্লিক করুন।
  2. আপনি যে অ্যাকাউন্টটি লিঙ্ক করতে চান সেটি বেছে নিন।
  3. পরিষেবা আইডি লিখুন।
  4. ঐচ্ছিকভাবে এক বা একাধিক স্কোপ লিখুন যার জন্য আপনি অ্যাক্সেসের অনুরোধ করবেন।
  5. স্টার্ট ডেমো ক্লিক করুন।
  6. অনুরোধ করা হলে, নিশ্চিত করুন যে আপনি লিঙ্ক করার অনুরোধে সম্মতি দিতে এবং অস্বীকার করতে পারেন।
  7. নিশ্চিত করুন যে আপনাকে আপনার প্ল্যাটফর্মে পুনঃনির্দেশিত করা হয়েছে।