কোড মডেল ব্যবহার করুন

গুগল আইডেন্টিটি সার্ভিসেস লাইব্রেরি ব্যবহারকারীদের ব্রাউজার ভিত্তিক পপআপ বা রিডাইরেক্ট ইউএক্স ফ্লো ব্যবহার করে Google থেকে একটি অনুমোদন কোড অনুরোধ করতে সক্ষম করে। এটি একটি নিরাপদ OAuth 2.0 প্রবাহ শুরু করে এবং এর ফলে ব্যবহারকারীর পক্ষ থেকে Google API-কে কল করার জন্য একটি অ্যাক্সেস টোকেন ব্যবহার করা হয়।

OAuth 2.0 অনুমোদন কোড প্রবাহ সারাংশ:

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

একটি কোড ক্লায়েন্ট শুরু করুন

google.accounts.oauth2.initCodeClient() পদ্ধতি একটি কোড ক্লায়েন্টকে শুরু করে।

আপনি পুনঃনির্দেশ বা পপআপ মোড ব্যবহারকারী প্রবাহ ব্যবহার করে একটি প্রমাণীকরণ কোড ভাগ করতে পারেন৷ রিডাইরেক্ট মোডের মাধ্যমে আপনি আপনার সার্ভারে একটি OAuth2 অনুমোদনের এন্ডপয়েন্ট হোস্ট করেন এবং Google ইউজার-এজেন্টকে এই এন্ডপয়েন্টে রিডাইরেক্ট করে, ইউআরএল প্যারামিটার হিসেবে প্রমাণীকরণ কোড শেয়ার করে। পপআপ মোডের জন্য আপনি একটি জাভাস্ক্রিপ্ট কলব্যাক হ্যান্ডলার সংজ্ঞায়িত করেন, যা আপনার সার্ভারে অনুমোদন কোড পাঠায়। পপআপ মোড ব্যবহার করা যেতে পারে দর্শকদের আপনার সাইট ত্যাগ না করে একটি বিরামহীন ব্যবহারকারীর অভিজ্ঞতা প্রদান করতে।

এর জন্য একটি ক্লায়েন্ট শুরু করতে:

  • UX ফ্লো রিডাইরেক্ট করুন, ux_mode redirect করুন এবং আপনার প্ল্যাটফর্মের অনুমোদন কোড এন্ডপয়েন্টে redirect_uri এর মান সেট করুন। আপনি API কনসোলে কনফিগার করা OAuth 2.0 ক্লায়েন্টের জন্য অনুমোদিত রিডাইরেক্ট ইউআরআইগুলির একটির সাথে মানটি অবশ্যই মেলে। এটি অবশ্যই আমাদের পুনঃনির্দেশিত ইউআরআই যাচাইকরণের নিয়মগুলি মেনে চলতে হবে৷

  • পপআপ UX ফ্লো, popup ux_mode সেট করুন এবং আপনার প্ল্যাটফর্মে অনুমোদন কোড পাঠাতে আপনি যে ফাংশনটি ব্যবহার করবেন তার নামে callback মান।

CSRF আক্রমণ প্রতিরোধ করা

ক্রস-সাইট-রিকোয়েস্ট-ফোরজি (CSRF) আক্রমণ প্রতিরোধে সাহায্য করার জন্য পুনঃনির্দেশ এবং পপআপ মোড UX প্রবাহের জন্য সামান্য ভিন্ন কৌশল নিযুক্ত করা হয়। রিডাইরেক্ট মোডের জন্য, OAuth 2.0 স্টেট প্যারামিটার ব্যবহার করা হয়। স্টেট প্যারামিটার তৈরি এবং যাচাই করার বিষয়ে আরও জানতে RFC6749 বিভাগ 10.12 ক্রস-সাইট অনুরোধ জালিয়াতি দেখুন। পপআপ মোডের সাথে, আপনি আপনার অনুরোধগুলিতে একটি কাস্টম HTTP শিরোনাম যোগ করুন এবং তারপরে আপনার সার্ভারে নিশ্চিত করুন যে এটি প্রত্যাশিত মান এবং উত্সের সাথে মেলে।

প্রমাণীকরণ কোড এবং CSRF হ্যান্ডলিং দেখানো একটি কোড স্নিপেট দেখতে একটি UX মোড চয়ন করুন:

রিডাইরেক্ট মোড

একটি ক্লায়েন্ট শুরু করুন যেখানে Google ব্যবহারকারীর ব্রাউজারকে আপনার প্রমাণীকরণের শেষ পয়েন্টে পুনঃনির্দেশ করে, একটি URL প্যারামিটার হিসাবে প্রমাণীকরণ কোড ভাগ করে।

const client = google.accounts.oauth2.initCodeClient({
  client_id: 'YOUR_GOOGLE_CLIENT_ID',
  scope: 'https://www.googleapis.com/auth/calendar.readonly',
  ux_mode: 'redirect',
  redirect_uri: "https://your.domain/code_callback_endpoint",
  state: "YOUR_BINDING_VALUE"
});

একটি ক্লায়েন্ট শুরু করুন যেখানে ব্যবহারকারীর ব্রাউজার Google থেকে একটি প্রমাণীকরণ কোড গ্রহণ করে এবং এটি আপনার সার্ভারে পাঠায়।

const client = google.accounts.oauth2.initCodeClient({
  client_id: 'YOUR_GOOGLE_CLIENT_ID',
  scope: 'https://www.googleapis.com/auth/calendar.readonly',
  ux_mode: 'popup',
  callback: (response) => {
    const xhr = new XMLHttpRequest();
    xhr.open('POST', code_receiver_uri, true);
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    // Set custom header for CRSF
    xhr.setRequestHeader('X-Requested-With', 'XmlHttpRequest');
    xhr.onload = function() {
      console.log('Auth code response: ' + xhr.responseText);
    };
    xhr.send('code=' + response.code);
  },
});

OAuth 2.0 কোড ফ্লো ট্রিগার করুন

ব্যবহারকারীর প্রবাহকে ট্রিগার করতে কোড ক্লায়েন্টের requestCode() পদ্ধতিতে কল করুন:

<button onclick="client.requestCode();">Authorize with Google</button>

এর জন্য ব্যবহারকারীকে একটি Google অ্যাকাউন্টে সাইন-ইন করতে হবে এবং আপনার পুনঃনির্দেশিত এন্ডপয়েন্ট বা আপনার কলব্যাক হ্যান্ডলারে একটি অনুমোদন কোড ফেরত দেওয়ার আগে পৃথক স্কোপ শেয়ার করতে সম্মতি দিতে হবে।

প্রমাণীকরণ কোড পরিচালনা

Google প্রতি ব্যবহারকারীর অনুমোদনের জন্য একটি অনন্য কোড তৈরি করে যা আপনি আপনার ব্যাকএন্ড সার্ভারে পান এবং যাচাই করেন।

পপআপ মোডের জন্য, callback দ্বারা নির্দিষ্ট করা হ্যান্ডলার, ব্যবহারকারীর ব্রাউজারে চলমান, অনুমোদন কোডটিকে আপনার প্ল্যাটফর্ম দ্বারা হোস্ট করা একটি এন্ডপয়েন্টে রিলে করে৷

পুনঃনির্দেশ মোডের জন্য, URL কোড প্যারামিটারে অনুমোদন কোড শেয়ার করে, redirect_url দ্বারা নির্দিষ্ট এন্ডপয়েন্টে একটি GET অনুরোধ পাঠানো হয়। অনুমোদন কোড পেতে:

  • আপনার যদি বিদ্যমান বাস্তবায়ন না থাকে তবে একটি নতুন অনুমোদনের শেষ পয়েন্ট তৈরি করুন , বা

  • GET অনুরোধ এবং URL প্যারামিটার গ্রহণ করতে আপনার বিদ্যমান শেষ পয়েন্ট আপডেট করুন । পূর্বে, পেলোডে অনুমোদন কোড মান সহ একটি PUT অনুরোধ ব্যবহার করা হয়েছিল।

অনুমোদনের শেষ পয়েন্ট

আপনার অনুমোদন কোড এন্ডপয়েন্ট অবশ্যই এই URL ক্যোয়ারী স্ট্রিং পরামিতিগুলির সাথে GET অনুরোধগুলি পরিচালনা করবে:

নাম মান
লেখক ব্যবহারকারী সাইন-ইন প্রমাণীকরণের জন্য অনুরোধ
কোড Google দ্বারা তৈরি করা একটি OAuth2 অনুমোদন কোড
এইচডি ব্যবহারকারীর অ্যাকাউন্টের হোস্ট করা ডোমেন
প্রম্পট ব্যবহারকারীর সম্মতি ডায়ালগ
সুযোগ অনুমোদনের জন্য এক বা একাধিক OAuth2 স্কোপের স্থান পৃথক করা তালিকা
রাষ্ট্র CRSF রাষ্ট্র পরিবর্তনশীল

auth-code নামে একটি এন্ডপয়েন্টে URL প্যারামিটার সহ GET অনুরোধের উদাহরণ এবং example.com দ্বারা হোস্ট করা হয়েছে:

Request URL: https://www.example.com/auth-code?state=42a7bd822fe32cc56&code=4/0AX4XfWiAvnXLqxlckFUVao8j0zvZUJ06AMgr-n0vSPotHWcn9p-zHCjqwr47KHS_vDvu8w&scope=email%20profile%20https://www.googleapis.com/auth/calendar.readonly%20https://www.googleapis.com/auth/photoslibrary.readonly%20https://www.googleapis.com/auth/contacts.readonly%20openid%20https://www.googleapis.com/auth/userinfo.email%20https://www.googleapis.com/auth/userinfo.profile&authuser=0&hd=example.com&prompt=consent

পূর্ববর্তী জাভাস্ক্রিপ্ট লাইব্রেরি বা Google OAuth 2.0 এন্ডপয়েন্টে সরাসরি কল করার মাধ্যমে অনুমোদন কোড প্রবাহ শুরু হলে, একটি POST অনুরোধ ব্যবহার করা হয়।

HTTP অনুরোধের বডিতে একটি পেলোড হিসাবে অনুমোদন কোড সহ POST অনুরোধের উদাহরণ:

Request URL: https://www.example.com/auth-code
Request Payload: 4/0AX4XfWhll-BMV82wi4YwbrSaTPaRpUGpKqJ4zBxQldU\_70cnIdh-GJOBZlyHU3MNcz4qaw

অনুরোধটি যাচাই করুন

CSRF আক্রমণ এড়াতে সাহায্য করার জন্য আপনার সার্ভারে নিম্নলিখিতগুলি করুন৷

পুনঃনির্দেশ মোডের জন্য, রাষ্ট্রীয় প্যারামিটারের মান পরীক্ষা করুন

X-Requested-With: XmlHttpRequest নিশ্চিত করুন : XmlHttpRequest হেডার পপআপ মোডের জন্য সেট করা আছে।

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

অ্যাক্সেস পান এবং টোকেন রিফ্রেশ করুন

আপনার ব্যাকএন্ড প্ল্যাটফর্ম Google থেকে একটি অনুমোদন কোড গ্রহণ করার পরে এবং অনুরোধটি যাচাই করার পরে, API কল করার জন্য Google থেকে অ্যাক্সেস পেতে এবং রিফ্রেশ টোকেন পেতে প্রমাণীকরণ কোডটি ব্যবহার করুন৷

ধাপ 5 থেকে শুরু হওয়া নির্দেশাবলী অনুসরণ করুন : ওয়েব সার্ভার অ্যাপ্লিকেশন গাইডের জন্য OAuth 2.0 ব্যবহার করে রিফ্রেশ এবং অ্যাক্সেস টোকেনের জন্য এক্সচেঞ্জ অনুমোদন কোড।

টোকেন পরিচালনা

আপনার প্ল্যাটফর্ম নিরাপদে রিফ্রেশ টোকেন সংরক্ষণ করে। যখন ব্যবহারকারীর অ্যাকাউন্টগুলি সরানো হয় বা ব্যবহারকারীর সম্মতি google.accounts.oauth2.revoke দ্বারা প্রত্যাহার করা হয় বা সরাসরি https://myaccount.google.com/permissions থেকে সঞ্চিত রিফ্রেশ টোকেনগুলি মুছুন৷

ঐচ্ছিকভাবে, আপনি ক্রস-অ্যাকাউন্ট সুরক্ষার মাধ্যমে ব্যবহারকারীর অ্যাকাউন্টগুলিকে সুরক্ষিত করার জন্য RISC-কে বিবেচনা করতে পারেন৷

সাধারণত, আপনার ব্যাকএন্ড প্ল্যাটফর্ম একটি অ্যাক্সেস টোকেন ব্যবহার করে Google API-কে কল করবে। যদি আপনার ওয়েব অ্যাপ ব্যবহারকারীর ব্রাউজার থেকে সরাসরি Google API-কে কল করে তবে আপনাকে অবশ্যই আপনার ওয়েব অ্যাপ্লিকেশনের সাথে অ্যাক্সেস টোকেন ভাগ করার একটি উপায় প্রয়োগ করতে হবে, এটি করা এই গাইডের সুযোগের বাইরে। এই পদ্ধতি অনুসরণ করার সময় এবং JavaScript-এর জন্য Google API ক্লায়েন্ট লাইব্রেরি ব্যবহার করার সময় অস্থায়ীভাবে ব্রাউজার মেমরিতে অ্যাক্সেস টোকেন সংরক্ষণ করতে gapi.client.SetToken() ব্যবহার করুন এবং Google API-কে কল করতে লাইব্রেরি সক্রিয় করুন।