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 বলা হয় এবং অ্যাকাউন্ট লিঙ্ক করা হয় যদি ক্রিয়েট ইনটেন্ট সফলভাবে রিটার্ন করে।

检查现有用户帐号(检查 intent)

在用户同意访问其 Google 个人资料后,Google 会发送一个请求,其中包含 Google 用户身份的签名断言。该断言包含用户的 Google 帐号 ID、姓名和电子邮件地址。为您的项目配置的令牌交换端点会处理该请求。

如果您的身份验证系统中已存在相应的 Google 帐号,则您的令牌交换端点会返回 account_found=true。如果 Google 帐号与现有用户不匹配,那么您的令牌交换端点会返回 account_found=false 的 HTTP 404 Not Found 错误。

请求的格式如下:

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 Web 令牌 (JWT),用于提供 Google 用户身份的签名断言。JWT 包含用户的 Google 帐号 ID、姓名和电子邮件地址等信息。
client_id 您分配给 Google 的客户端 ID。
client_secret 您分配给 Google 的客户端密钥。

为了响应 check intent 请求,您的令牌交换端点必须执行以下步骤:

  • 验证并解码 JWT 断言。
  • 检查您的身份验证系统中是否已存在该 Google 帐号。
জেডব্লিউটি দৃser়তা প্রমাণ করুন এবং ডিকোড করুন

আপনি আপনার ভাষার জন্য একটি JWT- ডিকোডিং লাইব্রেরি ব্যবহার করে JWT উক্তির যাচাইকরণ এবং ডিকোড করতে পারেন। টোকেনের স্বাক্ষরটি যাচাই করতে 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 মেয়াদ শেষ হয়নি ( exp ক্ষেত্র)।

email , email_verified এবং hd ক্ষেত্রগুলি ব্যবহার করে আপনি নির্ধারণ করতে পারেন যে গুগল হোস্ট করে এবং কোনও ইমেল ঠিকানার জন্য অনুমোদিত কিনা। গুগলের অনুমোদনের ক্ষেত্রে ব্যবহারকারী বর্তমানে বৈধ অ্যাকাউন্টের মালিক হিসাবে পরিচিত এবং আপনি পাসওয়ার্ড বা অন্যান্য চ্যালেঞ্জ পদ্ধতি এড়িয়ে যেতে পারেন। অন্যথায়, লিঙ্কিংয়ের আগে অ্যাকাউন্টটি যাচাই করতে এই পদ্ধতিগুলি ব্যবহার করা যেতে পারে।

গুগল অনুমোদনযোগ্য ক্ষেত্রে:

  • email একটি @gmail.com প্রত্যয় রয়েছে, এটি একটি Gmail অ্যাকাউন্ট।
  • email_verified সত্য এবং hd সেট করা হয়েছে, এটি একটি জি স্যুট অ্যাকাউন্ট।

ব্যবহারকারীরা জিমেইল বা জি স্যুট ব্যবহার না করেই গুগল অ্যাকাউন্টের জন্য নিবন্ধন করতে পারেন। যখন email @gmail.com প্রত্যয় থাকে না এবং hd অনুপস্থিত থাকে তবে গুগল অনুমোদিত নয় এবং পাসওয়ার্ড বা অন্যান্য চ্যালেঞ্জ পদ্ধতি ব্যবহারকারীকে যাচাই করার জন্য প্রস্তাবিত হয়। email_verfied সত্য হতে পারে যেহেতু গুগল অ্যাকাউন্ট তৈরি হওয়ার সময় গুগল প্রাথমিকভাবে ব্যবহারকারীকে যাচাই করেছিল তবে তৃতীয় পক্ষের ইমেল অ্যাকাউন্টের মালিকানা পরিবর্তিত হতে পারে।

检查您的身份验证系统中是否已存在该 Google 帐号

检查是否满足以下任一条件:

  • Google 帐号 ID 可在用户的数据库中找到,可在断言的 sub 字段找到。
  • 断言中的电子邮件地址与您的用户数据库中的用户匹配。

如果其中任一条件为 true,则表示用户已注册。在这种情况下,系统将返回如下所示的响应:

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

{
  "account_found":"true",
}

如果断言中指定的 Google 帐号 ID 和电子邮件地址都与用户数据库中的用户不匹配,则表示用户尚未注册。在这种情况下,您的令牌交换端点需要使用包含 "account_found": "false" 的 HTTP 404 错误进行响应,如以下示例所示:

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 অ্যাকাউন্টটি ইতিমধ্যে আপনার প্রমাণীকরণ সিস্টেমে উপস্থিত আছে কিনা তা পরীক্ষা করুন।
জেডব্লিউটি দৃser়তা প্রমাণ করুন এবং ডিকোড করুন

আপনি আপনার ভাষার জন্য একটি JWT- ডিকোডিং লাইব্রেরি ব্যবহার করে JWT উক্তির যাচাইকরণ এবং ডিকোড করতে পারেন। টোকেনের স্বাক্ষরটি যাচাই করতে 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 মেয়াদ শেষ হয়নি ( exp ক্ষেত্র)।

email , email_verified এবং hd ক্ষেত্রগুলি ব্যবহার করে আপনি নির্ধারণ করতে পারেন যে গুগল হোস্ট করে এবং কোনও ইমেল ঠিকানার জন্য অনুমোদিত কিনা। গুগলের অনুমোদনের ক্ষেত্রে ব্যবহারকারী বর্তমানে বৈধ অ্যাকাউন্টের মালিক হিসাবে পরিচিত এবং আপনি পাসওয়ার্ড বা অন্যান্য চ্যালেঞ্জ পদ্ধতি এড়িয়ে যেতে পারেন। অন্যথায়, লিঙ্কিংয়ের আগে অ্যাকাউন্টটি যাচাই করতে এই পদ্ধতিগুলি ব্যবহার করা যেতে পারে।

গুগল অনুমোদনযোগ্য ক্ষেত্রে:

  • email একটি @gmail.com প্রত্যয় রয়েছে, এটি একটি Gmail অ্যাকাউন্ট।
  • email_verified সত্য এবং hd সেট করা হয়েছে, এটি একটি জি স্যুট অ্যাকাউন্ট।

ব্যবহারকারীরা জিমেইল বা জি স্যুট ব্যবহার না করেই গুগল অ্যাকাউন্টের জন্য নিবন্ধন করতে পারেন। যখন email @gmail.com প্রত্যয় থাকে না এবং hd অনুপস্থিত থাকে তবে গুগল অনুমোদিত নয় এবং পাসওয়ার্ড বা অন্যান্য চ্যালেঞ্জ পদ্ধতি ব্যবহারকারীকে যাচাই করার জন্য প্রস্তাবিত হয়। email_verfied সত্য হতে পারে যেহেতু গুগল অ্যাকাউন্ট তৈরি হওয়ার সময় গুগল প্রাথমিকভাবে ব্যবহারকারীকে যাচাই করেছিল তবে তৃতীয় পক্ষের ইমেল অ্যাকাউন্টের মালিকানা পরিবর্তিত হতে পারে।

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 登录功能创建帐号(创建 intent)

当用户需要在您的服务上创建帐号时,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 Web 令牌 (JWT),用于提供 Google 用户身份的签名断言。JWT 包含用户的 Google 帐号 ID、姓名和电子邮件地址等信息。
client_id 您分配给 Google 的客户端 ID。
client_secret 您分配给 Google 的客户端密钥。

assertion 参数中的 JWT 包含用户的 Google 帐号 ID、名称和电子邮件地址,您可以使用这些信息在服务中创建新帐号。

为了响应 create intent 请求,您的令牌交换端点必须执行以下步骤:

  • 验证并解码 JWT 断言。
  • 验证用户信息并创建新帐号。
জেডব্লিউটি দৃser়তা প্রমাণ করুন এবং ডিকোড করুন

আপনি আপনার ভাষার জন্য একটি JWT- ডিকোডিং লাইব্রেরি ব্যবহার করে JWT উক্তির যাচাইকরণ এবং ডিকোড করতে পারেন। টোকেনের স্বাক্ষরটি যাচাই করতে 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 মেয়াদ শেষ হয়নি ( exp ক্ষেত্র)।

email , email_verified এবং hd ক্ষেত্রগুলি ব্যবহার করে আপনি নির্ধারণ করতে পারেন যে গুগল হোস্ট করে এবং কোনও ইমেল ঠিকানার জন্য অনুমোদিত কিনা। গুগলের অনুমোদনের ক্ষেত্রে ব্যবহারকারী বর্তমানে বৈধ অ্যাকাউন্টের মালিক হিসাবে পরিচিত এবং আপনি পাসওয়ার্ড বা অন্যান্য চ্যালেঞ্জ পদ্ধতি এড়িয়ে যেতে পারেন। অন্যথায়, লিঙ্কিংয়ের আগে অ্যাকাউন্টটি যাচাই করতে এই পদ্ধতিগুলি ব্যবহার করা যেতে পারে।

গুগল অনুমোদনযোগ্য ক্ষেত্রে:

  • email একটি @gmail.com প্রত্যয় রয়েছে, এটি একটি Gmail অ্যাকাউন্ট।
  • email_verified সত্য এবং hd সেট করা হয়েছে, এটি একটি জি স্যুট অ্যাকাউন্ট।

ব্যবহারকারীরা জিমেইল বা জি স্যুট ব্যবহার না করেই গুগল অ্যাকাউন্টের জন্য নিবন্ধন করতে পারেন। যখন email @gmail.com প্রত্যয় থাকে না এবং hd অনুপস্থিত থাকে তবে গুগল অনুমোদিত নয় এবং পাসওয়ার্ড বা অন্যান্য চ্যালেঞ্জ পদ্ধতি ব্যবহারকারীকে যাচাই করার জন্য প্রস্তাবিত হয়। email_verfied সত্য হতে পারে যেহেতু গুগল অ্যাকাউন্ট তৈরি হওয়ার সময় গুগল প্রাথমিকভাবে ব্যবহারকারীকে যাচাই করেছিল তবে তৃতীয় পক্ষের ইমেল অ্যাকাউন্টের মালিকানা পরিবর্তিত হতে পারে।

验证用户信息并创建新帐号

检查是否满足以下任一条件:

  • Google 帐号 ID 可在用户的数据库中找到,可在断言的 sub 字段找到。
  • 断言中的电子邮件地址与您的用户数据库中的用户匹配。

如果任一条件为 true,请提示用户将其现有帐号与其 Google 帐号相关联。为此,请对请求进行响应,并提供指定 error=linking_error 并将用户的电子邮件地址作为 login_hint 的 HTTP 401 错误。以下是一个示例响应:

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

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

Google 收到包含 linking_error 的 401 错误响应后,会将用户作为授权参数 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 API কনসোলের শংসাপত্র পৃষ্ঠা খুলুন।
  2. একটি Google APIs প্রকল্প তৈরি করুন বা নির্বাচন করুন৷

    যদি আপনার প্রোজেক্টের ওয়েব অ্যাপ্লিকেশন টাইপের জন্য ক্লায়েন্ট আইডি না থাকে, তাহলে ক্রেডেনশিয়াল তৈরি করুন > OAuth ক্লায়েন্ট আইডি তৈরি করতে ক্লিক করুন। অনুমোদিত জাভাস্ক্রিপ্ট অরিজিন বক্সে আপনার সাইটের ডোমেন অন্তর্ভুক্ত করতে ভুলবেন না। যখন আপনি স্থানীয় পরীক্ষা বা বিকাশ করেন, তখন আপনাকে অবশ্যই অনুমোদিত জাভাস্ক্রিপ্ট অরিজিন ফিল্ডে http 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 স্কোপ ব্যবহার না করেন তবে একটি নির্বিচারে স্ট্রিং)। আপনার হয়ে গেলে, অনুমোদন API গুলি ক্লিক করুন।
  6. ধাপ 2 এবং 3 য় ধাপ বিভাগগুলিতে, OAuth এর 2.0 প্রবাহ মধ্য দিয়ে যেতে এবং যাচাই করুন যে প্রতিটি পদক্ষেপ হিসাবে উদ্দীষ্ট কাজ করে।

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

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

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