গুগল কালো সম্প্রদায়ের জন্য জাতিগত সমতা উন্নয়নে প্রতিশ্রুতিবদ্ধ। দেখ কিভাবে.

ক্লায়েন্ট-সাইড ওয়েব অ্যাপ্লিকেশনগুলির জন্য OAuth 2.0

এই ডকুমেন্টটি জাভাস্ক্রিপ্ট ওয়েব অ্যাপ্লিকেশন থেকে গুগল এপিআইগুলিতে অ্যাক্সেস করার জন্য কীভাবে OAuth 2.0 অনুমোদনের প্রয়োগ করতে হবে তা ব্যাখ্যা করে। OAuth 2.0 ব্যবহারকারীদের ব্যবহারকারীর নাম, পাসওয়ার্ড এবং অন্যান্য তথ্য ব্যক্তিগত রাখার সময় একটি অ্যাপ্লিকেশনের সাথে নির্দিষ্ট ডেটা ভাগ করার মঞ্জুরি দেয়। উদাহরণস্বরূপ, একটি অ্যাপ্লিকেশন তাদের গুগল ড্রাইভে ফাইল সংরক্ষণের জন্য ব্যবহারকারীদের অনুমতি পেতে OAuth 2.0 ব্যবহার করতে পারে।

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

এই প্রবাহে, আপনার অ্যাপ্লিকেশনটি এমন একটি গুগল ইউআরএল খোলে যা আপনার অ্যাপ্লিকেশনটি এবং অ্যাপ্লিকেশনটির প্রয়োজনীয় এপিআই অ্যাক্সেসের ধরণটি সনাক্ত করতে কোয়েরি পরামিতি ব্যবহার করে। আপনি বর্তমান ব্রাউজার উইন্ডো বা একটি পপআপে URL টি খুলতে পারেন। ব্যবহারকারী গুগলের সাথে প্রমাণীকরণ করতে এবং অনুরোধকৃত অনুমতিগুলি দিতে পারেন। গুগল তারপরে ব্যবহারকারীকে আপনার অ্যাপে পুনঃনির্দেশ করে। পুনর্নির্দেশটিতে অ্যাক্সেস টোকেন অন্তর্ভুক্ত রয়েছে, যা আপনার অ্যাপ্লিকেশন যাচাই করে এবং তারপরে এপিআই অনুরোধগুলি করতে ব্যবহার করে।

পূর্বশর্ত

আপনার প্রকল্পের জন্য API গুলি সক্ষম করুন

গুগল এপিআইগুলিকে কল করে এমন কোনও অ্যাপ্লিকেশন API Console এ সেইগুলি সক্ষম করতে হবে।

আপনার প্রকল্পের জন্য একটি API সক্ষম করতে:

  1. Google API Console এ Open the API Library
  2. If prompted, select a project, or create a new one.
  3. API Library প্রোডাক্ট পরিবার এবং জনপ্রিয়তার দ্বারা গোষ্ঠীযুক্ত সমস্ত উপলভ্য API গুলি তালিকাবদ্ধ করে। আপনি যে API টি সক্ষম করতে চান তা যদি তালিকায় দৃশ্যমান না হয় তবে এটি সন্ধানের জন্য অনুসন্ধানটি ব্যবহার করুন, বা এর সাথে সম্পর্কিত পণ্য পরিবারে সমস্ত দেখুন ক্লিক করুন।
  4. আপনি সক্ষম করতে চান এমন API নির্বাচন করুন, তারপরে সক্ষম বোতামটি ক্লিক করুন।
  5. If prompted, enable billing.
  6. If prompted, read and accept the API's Terms of Service.

অনুমোদনের শংসাপত্র তৈরি করুন

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

  1. Go to the Credentials page.
  2. শংসাপত্র তৈরি করতে ক্লিক করুন> OAuth ক্লায়েন্ট আইডি
  3. ওয়েব অ্যাপ্লিকেশন অ্যাপ্লিকেশন প্রকার নির্বাচন করুন।
  4. ফর্ম পূরণ শেষ করুন. অনুমোদিত গুগল এপিআই অনুরোধ করতে জাভাস্ক্রিপ্ট ব্যবহার করা অ্যাপ্লিকেশনগুলিতে অনুমোদিত জাভাস্ক্রিপ্টের উত্স নির্দিষ্ট করতে হবে। উত্সগুলি সেই ডোমেনগুলি সনাক্ত করে যা থেকে আপনার অ্যাপ্লিকেশন OAuth 2.0 সার্ভারে অনুরোধ প্রেরণ করতে পারে। এই উত্সগুলি অবশ্যই গুগলের বৈধতা বিধি মেনে চলতে হবে।

অ্যাক্সেস স্কোপগুলি সনাক্ত করুন

স্কোপগুলি আপনার অ্যাপ্লিকেশনটিকে যে পরিমাণ অ্যাক্সেস মঞ্জুরি দেয় তা নিয়ন্ত্রণ করতে ব্যবহারকারীদের সক্ষম করার জন্য প্রয়োজনীয় সংস্থানগুলিতে কেবল অ্যাক্সেসের অনুরোধ করতে সক্ষম করে application সুতরাং, অনুরোধ করা স্কোপের সংখ্যা এবং ব্যবহারকারীর সম্মতি পাওয়ার সম্ভাবনার মধ্যে একটি বিপরীত সম্পর্ক থাকতে পারে।

আপনি OAuth 2.0 অনুমোদনের প্রয়োগ শুরু করার আগে, আমরা আপনাকে সুপারিশ করি যে আপনার স্কোপগুলিকে অ্যাক্সেস করার অনুমতি প্রয়োজন হবে তা চিহ্নিত করুন।

OAuth 2.0 এপিআই স্কোপস দস্তাবেজে স্কোপের পুরো তালিকা রয়েছে যা আপনি গুগল এপিআইগুলিতে অ্যাক্সেস করতে ব্যবহার করতে পারেন।

OAuth 2.0 অ্যাক্সেস টোকেন প্রাপ্ত

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

পদক্ষেপ 1: ক্লায়েন্ট অবজেক্টটি কনফিগার করুন

আপনি যদি গুগল এপিআইএস ক্লায়েন্ট লাইব্রেরিটি জাভাস্ক্রিপ্টের জন্য gapi.auth2 ২.০ প্রবাহকে পরিচালনা করতে ব্যবহার করেন তবে আপনার প্রথম পদক্ষেপটি হ'ল gapi.auth2 এবং gapi.client অবজেক্টগুলি কনফিগার করা। এই বিষয়গুলি ব্যবহারকারী প্রয়োগ অনুমোদন এবং অনুমোদিত API অনুরোধ করতে আপনার অ্যাপ্লিকেশন সক্ষম করে enable

ক্লায়েন্ট অবজেক্ট আপনার অ্যাপ্লিকেশন অ্যাক্সেসের জন্য অনুমতিের জন্য অনুরোধ করছে এমন স্কোপগুলি সনাক্ত করে। এই মানগুলি সম্মতি স্ক্রিনকে জানিয়ে দেয় যা গুগল ব্যবহারকারীর কাছে প্রদর্শন করে।

জেএস ক্লায়েন্ট লাইব্রেরি

জাভাস্ক্রিপ্ট ক্লায়েন্ট লাইব্রেরি অনুমোদনের প্রক্রিয়াটির অসংখ্য দিকগুলি সরল করে:

  1. এটি গুগলের অনুমোদনের সার্ভারের জন্য পুনর্নির্দেশ URL তৈরি করে এবং সেই URL টিতে ব্যবহারকারীকে নির্দেশ দেওয়ার জন্য একটি পদ্ধতি সরবরাহ করে।
  2. এটি আপনার অ্যাপ্লিকেশনটিতে সেই সার্ভার থেকে পুনঃনির্দেশ পরিচালনা করে।
  3. এটি অনুমোদন সার্ভার দ্বারা ফিরিয়ে দেওয়া অ্যাক্সেস টোকেনকে বৈধতা দেয়।
  4. এটি অনুমোদনের সার্ভারটি আপনার অ্যাপ্লিকেশনে প্রেরণ করে এমন অ্যাক্সেস টোকেন সংরক্ষণ করে এবং পরে যখন আপনার অ্যাপ্লিকেশন অনুমোদিত এপিআই কল করে তখন তা পুনরুদ্ধার করে।

নীচের কোড স্নিপেট এই দস্তাবেজের পরে প্রদর্শিত সম্পূর্ণ উদাহরণ থেকে একটি উদ্ধৃত অংশ। এই কোডটি gapi.client অবজেক্টটি আরম্ভ করে, যা আপনার অ্যাপ্লিকেশনটি পরে এপিআই কল করার জন্য ব্যবহার করবে। যখন সেই অবজেক্টটি তৈরি করা হয়, আপনার অ্যাপ্লিকেশনটি ব্যবহারকারীর অনুমোদনের স্থিতি পরীক্ষা করতে ও নিরীক্ষণের জন্য gapi.auth2 অবজেক্টটিও শুরু করা হয়।

gapi.client.init এ কল নিম্নলিখিত ক্ষেত্রগুলি নির্দিষ্ট করে:

  • apiKey এবং clientId মানগুলি আপনার অ্যাপ্লিকেশনটির অনুমোদনের শংসাপত্রগুলি নির্দিষ্ট করে। অনুমোদনের শংসাপত্র তৈরির ক্ষেত্রে যেমন আলোচনা হয়েছে, এই মানগুলি API Console এ প্রাপ্ত হতে পারে। নোট করুন যে clientId প্রয়োজনীয় যদি আপনার অ্যাপ্লিকেশন অনুমোদিত এপিআই অনুরোধ করে। যে অ্যাপ্লিকেশনগুলি কেবল অননুমোদিত অনুরোধগুলি করে কেবলমাত্র একটি API কী নির্দিষ্ট করতে পারে।
  • scope ক্ষেত্রটি আপনার অ্যাপ্লিকেশন ব্যবহারকারীর পক্ষে অ্যাক্সেস করতে পারে এমন সংস্থানগুলির সাথে সম্পর্কিত এমন অ্যাক্সেস scope একটি স্থান-সীমান্ত তালিকাটি নির্দিষ্ট করে। এই মানগুলি সম্মতি স্ক্রিনকে অবহিত করে যা গুগল ব্যবহারকারীর কাছে প্রদর্শন করে।

    আমরা যখনই সম্ভব আপনার প্রসঙ্গে প্রবন্ধে অনুমোদনের স্কোপে অ্যাক্সেসের জন্য অনুরোধ করার অনুরোধ করছি। বর্ধিত অনুমোদনের মাধ্যমে প্রসঙ্গে ব্যবহারকারী ডেটাতে অ্যাক্সেসের অনুরোধ করার মাধ্যমে আপনি ব্যবহারকারীদের আরও সহজেই বুঝতে সাহায্য করতে পারেন যে আপনার অ্যাপ্লিকেশনটির কাছে অনুরোধ করা হচ্ছে এমন অ্যাক্সেসের প্রয়োজন কেন।

  • discoveryDocs ডক্স ক্ষেত্রটি আপনার অ্যাপ্লিকেশনটি ব্যবহার করে এমন API আবিষ্কারের নথিগুলির একটি তালিকা সনাক্ত করে। একটি আবিষ্কারের নথিটি কোনও API এর পৃষ্ঠার বর্ণনা দেয়, যার রিসোর্স স্কিমাসহ, এবং জাভাস্ক্রিপ্ট ক্লায়েন্ট লাইব্রেরি সেই তথ্যগুলি অ্যাপ্লিকেশনগুলি ব্যবহার করতে পারে এমন পদ্ধতিগুলি তৈরি করতে ব্যবহার করে। এই উদাহরণে, কোডটি Google ড্রাইভ API এর 3 সংস্করণে আবিষ্কারের দলিলটি পুনরুদ্ধার করে।

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

var GoogleAuth; // Google Auth object.
function initClient() {
  gapi.client.init({
      'apiKey': 'YOUR_API_KEY',
      'clientId': 'YOUR_CLIENT_ID',
      'scope': 'https://www.googleapis.com/auth/drive.metadata.readonly',
      'discoveryDocs': ['https://www.googleapis.com/discovery/v1/apis/drive/v3/rest']
  }).then(function () {
      GoogleAuth = gapi.auth2.getAuthInstance();

      // Listen for sign-in state changes.
      GoogleAuth.isSignedIn.listen(updateSigninStatus);
  });
}

OAuth 2.0 শেষ পয়েন্ট

যদি আপনি সরাসরি OAuth 2.0 শেষ পয়েন্টগুলিতে অ্যাক্সেস করে থাকেন তবে আপনি পরবর্তী ধাপে এগিয়ে যেতে পারেন।

পদক্ষেপ 2: গুগলের OAuth 2.0 সার্ভারে পুনঃনির্দেশ করুন

কোনও ব্যবহারকারীর ডেটা অ্যাক্সেসের অনুমতিের জন্য অনুরোধ করতে, ব্যবহারকারীকে গুগলের OAuth 2.0 সার্ভারে পুনর্নির্দেশ করুন।

জেএস ক্লায়েন্ট লাইব্রেরি

ব্যবহারকারীকে গুগলের অনুমোদনের সার্ভারে GoogleAuth.signIn() করতে GoogleAuth.signIn() পদ্ধতিতে কল করুন।

GoogleAuth.signIn();

অনুশীলনে, আপনার অ্যাপ্লিকেশন কোনও এপিআই কল করার চেষ্টা করার আগে সাইন signIn() পদ্ধতিতে কল করতে হবে কিনা তা নির্ধারণের জন্য বুলিয়ান মান সেট করে।

নীচের কোড স্নিপেট প্রদর্শন করে যে আপনি কীভাবে ব্যবহারকারী অনুমোদনের প্রবাহটি শুরু করবেন। স্নিপেট সম্পর্কে নিম্নলিখিত পয়েন্টগুলি নোট করুন:

  • GoogleAuth উল্লিখিত GoogleAuth অবজেক্টটি পদক্ষেপ 1 এ কোড স্নিপেটে সংজ্ঞায়িত গ্লোবাল ভেরিয়েবলের সমান।

  • updateSigninStatus ফাংশন এমন শ্রোতা যা ব্যবহারকারীর অনুমোদনের স্থিতিতে পরিবর্তনগুলির জন্য updateSigninStatus । শ্রোতা হিসাবে এর ভূমিকাটি পদক্ষেপ 1:
    GoogleAuth.isSignedIn.listen(updateSigninStatus);
    তে কোড স্নিপেটেও সংজ্ঞায়িত হয়েছিল
  • স্নিপেট দুটি অতিরিক্ত বৈশ্বিক ভেরিয়েবল সংজ্ঞা দেয়:

    • isAuthorized হ'ল বুলিয়ান ভেরিয়েবল যা ব্যবহারকারী ইতিমধ্যে সাইন ইন হয়েছে কিনা তা নির্দেশ করে the ব্যবহারকারী অ্যাপ্লিকেশনটিতে সাইন ইন বা আউট হলে অ্যাপ্লিকেশনটি লোড হয় এবং আপডেট হলে এই মানটি সেট করা যেতে পারে।

      এই স্নিপেটে, sendAuthorizedApiRequest ফাংশনটি ভেরিয়েবলের মানটি পরীক্ষা করে অ্যাপটি এমন কোনও API অনুরোধের চেষ্টা করবে যাতে অনুমোদনের প্রয়োজন হয় বা ব্যবহারকারীকে অ্যাপটি অনুমোদনের জন্য অনুরোধ জানানো উচিত determine

    • currentApiRequest হল এমন একটি বস্তু যা ব্যবহারকারীর দ্বারা চেষ্টা করা সর্বশেষ এপিআই অনুরোধ সম্পর্কে বিশদ সংরক্ষণ করে। অ্যাপ্লিকেশন sendAuthorizedApiRequest কল করলে বস্তুর মান সেট করা হয়।

      যদি ব্যবহারকারী অ্যাপটি অনুমোদিত করে থাকে তবে অনুরোধটি এখনই কার্যকর করা হবে। অন্যথায়, ফাংশনটি ব্যবহারকারীকে সাইন ইন করতে পুনঃনির্দেশ করে the ব্যবহারকারী সাইন ইন করার পরে, updateSignInStatus ফাংশন প্রেরণ করুন অনুমোদনের প্রবাহ শুরু হওয়ার আগে একই অনুরোধটি sendAuthorizedApiRequest প্রেরণ করা হয়েছে sendAuthorizedApiRequest

var isAuthorized;
var currentApiRequest;

/**
 * Store the request details. Then check to determine whether the user
 * has authorized the application.
 *   - If the user has granted access, make the API request.
 *   - If the user has not granted access, initiate the sign-in flow.
 */
function sendAuthorizedApiRequest(requestDetails) {
  currentApiRequest = requestDetails;
  if (isAuthorized) {
    // Make API request
    // gapi.client.request(requestDetails)

    // Reset currentApiRequest variable.
    currentApiRequest = {};
  } else {
    GoogleAuth.signIn();
  }
}

/**
 * Listener called when user completes auth flow. If the currentApiRequest
 * variable is set, then the user was prompted to authorize the application
 * before the request executed. In that case, proceed with that API request.
 */
function updateSigninStatus(isSignedIn) {
  if (isSignedIn) {
    isAuthorized = true;
    if (currentApiRequest) {
      sendAuthorizedApiRequest(currentApiRequest);
    }
  } else {
    isAuthorized = false;
  }
}

OAuth 2.0 শেষ পয়েন্ট

https://accounts.google.com/o/oauth2/v2/auth এ Google এর OAuth 2.0 শেষ পয়েন্ট থেকে অ্যাক্সেসের জন্য একটি URL তৈরি করুন। এই শেষ পয়েন্টটি এইচটিটিপিএসের মাধ্যমে অ্যাক্সেসযোগ্য; সরল এইচটিটিপি সংযোগগুলি অস্বীকার করা হয়েছে।

গুগল অনুমোদন সার্ভার ওয়েব সার্ভার অ্যাপ্লিকেশনগুলির জন্য নিম্নলিখিত ক্যোয়ারিং স্ট্রিং প্যারামিটারগুলিকে সমর্থন করে:

পরামিতি
client_id প্রয়োজনীয়

আপনার আবেদনের জন্য ক্লায়েন্ট আইডি। আপনি API Console Credentials page এই মানটি পেতে পারেন।

redirect_uri প্রয়োজনীয়

ব্যবহারকারী অনুমোদনের প্রবাহটি সম্পূর্ণ করার পরে যেখানে API সার্ভার ব্যবহারকারীকে পুনঃনির্দেশ করে সেখানে নির্ধারণ করে। মানটি অবশ্যই অবশ্যই OAuth 2.0 ক্লায়েন্টের জন্য অনুমোদিত পুনর্নির্দেশের ইউআরআইয়ের একটির সাথে মিলবে, যা আপনি আপনার ক্লায়েন্টের API Console Credentials page এ কনফিগার করেছেন। এই মানটি যদি সরবরাহিত client_id জন্য অনুমোদিত রিডাইরেক্ট client_id মেলে না তবে আপনি একটি redirect_uri_mismatch ত্রুটি পাবেন।

মনে রাখবেন যে http বা https স্কিম, কেস এবং ট্রেলিং স্ল্যাশ (' / ') অবশ্যই মিলবে।

response_type প্রয়োজনীয়

জাভাস্ক্রিপ্ট অ্যাপ্লিকেশনগুলিকে পরামিতিটির মান token সেট করা দরকার। এই মানটি গুগল অনুমোদনের সার্ভারকে ইউআরআই ( # ) এর টুকরোগুলি শনাক্তকারীটির name=value জুটি হিসাবে অ্যাক্সেস টোকেনটি ফিরিয়ে আনতে নির্দেশ দেয় যেখানে অনুমোদনের প্রক্রিয়া শেষ করার পরে ব্যবহারকারীকে পুনঃনির্দেশিত করা হয়।

scope প্রয়োজনীয়

আপনার অ্যাপ্লিকেশনটি ব্যবহারকারীর পক্ষে অ্যাক্সেস করতে পারে এমন সংস্থানগুলি সনাক্ত করতে স্কোপের একটি স্থান-সীমিত তালিকা ited এই মানগুলি সম্মতি স্ক্রিনকে অবহিত করে যা গুগল ব্যবহারকারীর কাছে প্রদর্শন করে।

স্কোপগুলি আপনার অ্যাপ্লিকেশনটিকে যে পরিমাণ অ্যাক্সেস মঞ্জুরি দেয় তা নিয়ন্ত্রণ করতে ব্যবহারকারীদের সক্ষম করার জন্য প্রয়োজনীয় সংস্থানগুলিতে কেবল অ্যাক্সেসের অনুরোধ করতে সক্ষম করে application সুতরাং, অনুরোধ করা স্কোপের সংখ্যা এবং ব্যবহারকারীর সম্মতি পাওয়ার সম্ভাবনার মধ্যে একটি বিপরীত সম্পর্ক রয়েছে।

আমরা যখনই সম্ভব আপনার প্রসঙ্গে প্রবন্ধে অনুমোদনের স্কোপে অ্যাক্সেসের জন্য অনুরোধ করার অনুরোধ করি। বর্ধিত অনুমোদনের মাধ্যমে প্রসঙ্গে ব্যবহারকারী ডেটাতে অ্যাক্সেসের অনুরোধ করার মাধ্যমে আপনি ব্যবহারকারীদের আরও সহজেই বুঝতে সাহায্য করতে পারেন যে আপনার অ্যাপ্লিকেশনটির কাছে অনুরোধ করা হচ্ছে এমন অ্যাক্সেসের প্রয়োজন কেন।

state প্রস্তাবিত

আপনার অনুমোদনের অনুরোধ এবং অনুমোদনের সার্ভারের প্রতিক্রিয়ার মধ্যে স্থিতিশীলতা বজায় রাখতে আপনার অ্যাপ্লিকেশনটি ব্যবহার করে এমন কোনও স্ট্রিং মান নির্দিষ্ট করে। আপনার অ্যাপ্লিকেশনটির অ্যাক্সেসের অনুরোধটি অনুমোদিত বা অস্বীকার করার পরে সার্ভারটি আপনাকে redirect_uri এর URL ফ্রেগমেন্ট আইডেন্টিফায়ার ( # ) এর name=value জুটি হিসাবে প্রেরণ করে ঠিক সেই মানটি ফিরিয়ে দেয়।

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

include_granted_scopes .চ্ছিক

প্রসঙ্গে অতিরিক্ত স্কোপে অ্যাক্সেসের অনুরোধ করতে বর্ধিত অনুমোদন ব্যবহারের জন্য অ্যাপ্লিকেশনগুলিকে সক্ষম করে। আপনি যদি এই প্যারামিটারটির মানটিকে true সেট করে থাকেন এবং অনুমোদনের অনুরোধটি মঞ্জুরিপ্রাপ্ত হয়, তবে নতুন অ্যাক্সেস টোকন এমন কোনও স্কোপগুলিকেও কভার করবে যেখানে ব্যবহারকারী পূর্বে অ্যাপ্লিকেশন অ্যাক্সেস দিয়েছে। উদাহরণগুলির জন্য বর্ধিত অনুমোদনের বিভাগটি দেখুন।

login_hint .চ্ছিক

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

কোনও ইমেল ঠিকানা বা sub সনাক্তকারীকে পরামিতি মান সেট করুন যা ব্যবহারকারীর গুগল আইডির সমতুল্য।

prompt .চ্ছিক

একটি স্থান-সীমিত, কেস-সংবেদনশীল তালিকা ব্যবহারকারীকে উপস্থাপিত করার অনুরোধ জানায়। আপনি যদি এই প্যারামিটারটি নির্দিষ্ট না করেন তবে আপনার প্রকল্পটি যখন প্রথম আপনার অ্যাক্সেসের জন্য অনুরোধ করবে তখনই আপনাকে ব্যবহারকারীকে অনুরোধ জানানো হবে। আরও তথ্যের জন্য প্রম্পটিং পুনরায় সম্মতি দেখুন।

সম্ভাব্য মানগুলি হ'ল:

none কোনও প্রমাণীকরণ বা সম্মতি স্ক্রিন প্রদর্শন করবেন না। অন্যান্য মান সহ নির্দিষ্ট করা উচিত নয়।
consent ব্যবহারকারীকে সম্মতি জানাতে অনুরোধ করুন।
select_account ব্যবহারকারীকে একটি অ্যাকাউন্ট নির্বাচন করতে অনুরোধ করুন।

নমুনা গুগলের অনুমোদনের সার্ভারে পুনর্নির্দেশ

পঠনযোগ্যতার জন্য লাইন ব্রেক এবং স্পেস সহ একটি উদাহরণ URL নীচে দেখানো হয়েছে।

https://accounts.google.com/o/oauth2/v2/auth?
 scope=https%3A//www.googleapis.com/auth/drive.metadata.readonly&
 include_granted_scopes=true&
 response_type=token&
 state=state_parameter_passthrough_value&
 redirect_uri=https%3A//oauth2.example.com/code&
 client_id=client_id

আপনি অনুরোধ URL তৈরি করার পরে, ব্যবহারকারীকে এটিতে পুনর্নির্দেশ করুন।

জাভাস্ক্রিপ্ট নমুনা কোড

নিম্নলিখিত জাভাস্ক্রিপ্ট স্নিপেট জাভাস্ক্রিপ্টের জন্য গুগল এপিআইএস ক্লায়েন্ট লাইব্রেরি ব্যবহার না করে কীভাবে জাভাস্ক্রিপ্টে অনুমোদন প্রবাহ শুরু করবেন তা দেখায়। যেহেতু এই OAuth 2.0 শেষ পয়েন্টটি ক্রস-অরিজিন রিসোর্স শেয়ারিং (সিওআরএস) সমর্থন করে না, স্নিপেট একটি ফর্ম তৈরি করে যা সেই শেষ পয়েন্টটিতে অনুরোধটি খোলে।

/*
 * Create form to request access token from Google's OAuth 2.0 server.
 */
function oauthSignIn() {
  // Google's OAuth 2.0 endpoint for requesting an access token
  var oauth2Endpoint = 'https://accounts.google.com/o/oauth2/v2/auth';

  // Create <form> element to submit parameters to OAuth 2.0 endpoint.
  var form = document.createElement('form');
  form.setAttribute('method', 'GET'); // Send as a GET request.
  form.setAttribute('action', oauth2Endpoint);

  // Parameters to pass to OAuth 2.0 endpoint.
  var params = {'client_id': 'YOUR_CLIENT_ID',
                'redirect_uri': 'YOUR_REDIRECT_URI',
                'response_type': 'token',
                'scope': 'https://www.googleapis.com/auth/drive.metadata.readonly',
                'include_granted_scopes': 'true',
                'state': 'pass-through value'};

  // Add form parameters as hidden input values.
  for (var p in params) {
    var input = document.createElement('input');
    input.setAttribute('type', 'hidden');
    input.setAttribute('name', p);
    input.setAttribute('value', params[p]);
    form.appendChild(input);
  }

  // Add form to page and submit it to open the OAuth 2.0 endpoint.
  document.body.appendChild(form);
  form.submit();
}

পদক্ষেপ 3: গুগল ব্যবহারকারীকে সম্মতি জানাতে অনুরোধ করে

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

আপনার অ্যাপ্লিকেশনটির এই পর্যায়ে কিছু করার দরকার নেই কারণ এটি Google এর OAuth 2.0 সার্ভারের প্রতিক্রিয়ার জন্য অপেক্ষা করে যে কোনও অ্যাক্সেস মঞ্জুর হয়েছে কিনা তা নির্দেশ করে। সেই প্রতিক্রিয়াটি নিম্নলিখিত ধাপে ব্যাখ্যা করা হয়েছে।

ত্রুটি

গুগলের OAuth 2.0 অনুমোদনের শেষ পয়েন্টে অনুরোধগুলি প্রত্যাশিত প্রমাণীকরণ এবং অনুমোদনের প্রবাহের পরিবর্তে ব্যবহারকারী-মুখের ত্রুটি বার্তা প্রদর্শন করতে পারে। সাধারণ ত্রুটি কোড এবং প্রস্তাবিত রেজোলিউশন নীচে তালিকাভুক্ত করা হয়েছে।

admin_policy_enforced

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

disallowed_useragent

অনুমোদনের শেষ পয়েন্টটি গুগলের OAuth 2.0 নীতিগুলি দ্বারা অনুমোদিত নয় এমন এম্বেড ব্যবহারকারী ব্যবহারকারী-এজেন্টের অভ্যন্তরে প্রদর্শিত হবে।

অ্যান্ড্রয়েড

android.webkit.WebView অনুমোদনের অনুরোধগুলি খোলার সময় অ্যান্ড্রয়েড বিকাশকারীরা এই ত্রুটি বার্তার মুখোমুখি হতে পারেন। বিকাশকারীদের পরিবর্তে অ্যান্ড্রয়েডের জন্য গুগল সাইন-ইন বা অ্যান্ড্রয়েডের জন্য ওপেনআইডি ফাউন্ডেশনের অ্যাপঅথের মতো অ্যান্ড্রয়েড লাইব্রেরি ব্যবহার করা উচিত।

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

আইওএস

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

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

org_internal

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

origin_mismatch

অনুমোদনের অনুরোধের সূচনা করে স্কোয়া, ডোমেন এবং / অথবা জাভাস্ক্রিপ্টের বন্দরটি OAuth ক্লায়েন্ট আইডির জন্য নিবন্ধিত অনুমোদিত জাভাস্ক্রিপ্ট উত্স ইউআরআইয়ের সাথে মেলে না। Google API Console Credentials page অনুমোদিত জাভাস্ক্রিপ্টের উত্স পর্যালোচনা করুন।

redirect_uri_mismatch

redirect_uri অনুমোদন অনুরোধ পাস OAuth ক্লায়েন্ট ID- র জন্য একজন অনুমোদিত পুনর্নির্দেশ কোনো URI সাথে মিলছে না। Google API Console Credentials page এ অনুমোদিত পুনর্নির্দেশের ইউআরআই পর্যালোচনা করুন।

অনুমোদনের অনুরোধের সূচনা করে স্কোয়া, ডোমেন এবং / অথবা জাভাস্ক্রিপ্টের বন্দরটি OAuth ক্লায়েন্ট আইডির জন্য নিবন্ধিত অনুমোদিত জাভাস্ক্রিপ্ট উত্স ইউআরআইয়ের সাথে মেলে না। Google API Console Credentials page অনুমোদিত জাভাস্ক্রিপ্টের উত্স পর্যালোচনা করুন।

পদক্ষেপ 4: OAuth 2.0 সার্ভারের প্রতিক্রিয়াটি হ্যান্ডেল করুন

জেএস ক্লায়েন্ট লাইব্রেরি

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

OAuth 2.0 শেষ পয়েন্ট

OAuth 2.0 সার্ভারটি আপনার অ্যাক্সেস টোকেন অনুরোধে উল্লিখিত redirect_uri প্রতিক্রিয়া প্রেরণ করে।

যদি ব্যবহারকারী অনুরোধটি অনুমোদন করে, তবে প্রতিক্রিয়াটিতে অ্যাক্সেস টোকেন রয়েছে। যদি ব্যবহারকারী অনুরোধটি অনুমোদন না করে তবে প্রতিক্রিয়াটিতে একটি ত্রুটি বার্তা রয়েছে। অ্যাক্সেস টোকেন বা ত্রুটি বার্তাটি নীচে দেখানো অনুসারে পুনঃনির্দেশিত ইউআরআইয়ের হ্যাশ টুকরাটিতে ফিরে আসে:

  • অ্যাক্সেস টোকেন প্রতিক্রিয়া:

    https://oauth2.example.com/callback#access_token=4/P7q7W91&token_type=Bearer&expires_in=3600

    access_token প্যারামিটার ছাড়াও, টুকরো token_type প্যারামিটারও থাকে, যা সর্বদা Bearer সেট করা থাকে এবং expires_in প্যারামিটার যা টোকেনের আজীবন সেকেন্ডে নির্দিষ্ট করে। যদি অ্যাক্সেস টোকেন অনুরোধে state প্যারামিটার নির্দিষ্ট করা থাকে তবে এর মানটিও প্রতিক্রিয়াতে অন্তর্ভুক্ত।

  • একটি ত্রুটি প্রতিক্রিয়া:
    https://oauth2.example.com/callback#error=access_denied

নমুনা OAuth 2.0 সার্ভার প্রতিক্রিয়া

আপনি নীচের নমুনা URL টিতে ক্লিক করে এই প্রবাহটি পরীক্ষা করতে পারেন, যা আপনার গুগল ড্রাইভে ফাইলগুলির মেটাডেটা দেখতে কেবল পঠনযোগ্য অ্যাক্সেসের অনুরোধ করে:

https://accounts.google.com/o/oauth2/v2/auth?
 scope=https%3A//www.googleapis.com/auth/drive.metadata.readonly&
 include_granted_scopes=true&
 response_type=token&
 state=state_parameter_passthrough_value&
 redirect_uri=https%3A//oauth2.example.com/code&
 client_id=client_id

OAuth 2.0 প্রবাহ সম্পূর্ণ করার পরে, আপনাকে http://localhost/oauth2callback পুনঃনির্দেশ করা হবে। আপনার স্থানীয় মেশিন ঠিকানায় কোনও ফাইল পরিবেশন করতে 404 NOT FOUND সেই URL টি 404 NOT FOUND ত্রুটি ঘটবে। পরবর্তী পদক্ষেপটি ইউআরআই-এ ফিরে আসা তথ্য সম্পর্কে আরও বিশদ সরবরাহ করে যখন ব্যবহারকারীকে আপনার অ্যাপ্লিকেশনটিতে পুনঃনির্দেশিত করা হয়।

গুগল এপিআইগুলিতে কল করা হচ্ছে

জেএস ক্লায়েন্ট লাইব্রেরি

আপনার অ্যাপ্লিকেশনটি অ্যাক্সেস টোকেন পাওয়ার পরে, আপনি জাভাস্ক্রিপ্ট ক্লায়েন্ট লাইব্রেরি ব্যবহারকারীর পক্ষে এপিআই অনুরোধ করতে ব্যবহার করতে পারেন। ক্লায়েন্ট লাইব্রেরি আপনার জন্য অ্যাক্সেস টোকেন পরিচালনা করে এবং অনুরোধে এটি প্রেরণ করার জন্য আপনার বিশেষ কিছু করার দরকার নেই।

ক্লায়েন্ট লাইব্রেরি এপিআই পদ্ধতিতে কল করার দুটি উপায় সমর্থন করে। আপনি যদি কোনও আবিষ্কারের দস্তাবেজ লোড করেছেন, তবে এপিআই আপনার জন্য পদ্ধতি-নির্দিষ্ট ফাংশন সংজ্ঞায়িত করবে। আপনি এপিআই পদ্ধতিতে কল করতে gapi.client.request ফাংশনটিও ব্যবহার করতে পারেন। নিম্নলিখিত দুটি স্নিপেটগুলি ড্রাইভ এপিআই-র about.get পদ্ধতির জন্য এই বিকল্পগুলি প্রদর্শন করে।

// Example 1: Use method-specific function
var request = gapi.client.drive.about.get({'fields': 'user'});

// Execute the API request.
request.execute(function(response) {
  console.log(response);
});


// Example 2: Use gapi.client.request(args) function
var request = gapi.client.request({
  'method': 'GET',
  'path': '/drive/v3/about',
  'params': {'fields': 'user'}
});
// Execute the API request.
request.execute(function(response) {
  console.log(response);
});

OAuth 2.0 শেষ পয়েন্ট

আপনার অ্যাপ্লিকেশন কোনও অ্যাক্সেস টোকেন পাওয়ার পরে, যদি আপনি এপিআই দ্বারা প্রয়োজনীয় অ্যাক্সেসের সুযোগ (গুলি) মঞ্জুর করা হয়ে থাকে তবে আপনি প্রদত্ত ব্যবহারকারীর অ্যাকাউন্টের পক্ষ থেকে একটি গুগল এপিআইতে কল করতে টোকেনটি ব্যবহার করতে পারেন। এই কাজের জন্য, অ্যাক্সেস API করার জন্য একটি অনুরোধ IN টোকেন পারেন একটি অন্তর্ভুক্ত করে অন্তর্ভুক্ত access_token ক্যোয়ারী মাপদন্ড অথবা একটি Authorization HTTP শিরোলেখ Bearer মান। যখন সম্ভব হয়, এইচটিটিপি শিরোনামটি পছন্দনীয়, কারণ কোয়েরি স্ট্রিংগুলি সার্ভার লগগুলিতে দৃশ্যমান থাকে। বেশিরভাগ ক্ষেত্রে আপনি গুগল এপিআইগুলিতে আপনার কল সেট আপ করতে ক্লায়েন্ট লাইব্রেরি ব্যবহার করতে পারেন (উদাহরণস্বরূপ, ড্রাইভ ফাইলস এপিআইতে কল করার সময়)।

আপনি সমস্ত গুগল এপিআই চেষ্টা করে দেখতে পারেন এবং OAuth 2.0 খেলার মাঠে তাদের স্কোপগুলি দেখতে পারেন।

HTTP উদাহরণ পেতে

Authorization: Bearer ব্যবহার করে drive.files এন্ডপয়েন্ট (ড্রাইভ ফাইলস এপিআই) তে একটি কল: drive.files এইচটিটিপি শিরোনাম নিম্নলিখিতগুলির মতো দেখাবে। মনে রাখবেন যে আপনার নিজের অ্যাক্সেস টোকেন নির্দিষ্ট করতে হবে:

GET /drive/v2/files HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer access_token

access_token ক্যোয়ারী স্ট্রিং প্যারামিটার ব্যবহার করে প্রমাণীকৃত ব্যবহারকারীর জন্য একই API তে এখানে কল রয়েছে:

GET https://www.googleapis.com/drive/v2/files?access_token=access_token

curl উদাহরণ

আপনি এই কমান্ডগুলি curl কমান্ড-লাইন অ্যাপ্লিকেশন দিয়ে পরীক্ষা করতে পারেন। এখানে একটি উদাহরণ যা HTTP শিরোনাম বিকল্পটি ব্যবহার করে (পছন্দসই):

curl -H "Authorization: Bearer access_token" https://www.googleapis.com/drive/v2/files

অথবা, বিকল্পভাবে ক্যোরি স্ট্রিং প্যারামিটার বিকল্প:

curl https://www.googleapis.com/drive/v2/files?access_token=access_token

জাভাস্ক্রিপ্ট নমুনা কোড

নীচের কোড স্নিপেটটি দেখায় যে কীভাবে কোনও গুগল এপিআইতে অনুরোধ প্রেরণের জন্য সিওআরএস (ক্রস-অরিজিন রিসোর্স শেয়ারিং) ব্যবহার করতে হয়। এই উদাহরণটি জাভাস্ক্রিপ্টের জন্য গুগল এপিআইএস ক্লায়েন্ট লাইব্রেরি ব্যবহার করে না। তবে, আপনি ক্লায়েন্ট লাইব্রেরি ব্যবহার না করেও, সেই লাইব্রেরির ডকুমেন্টেশনে CORS সহায়তা গাইড সম্ভবত আপনাকে এই অনুরোধগুলি আরও ভালভাবে বুঝতে সাহায্য করবে।

এই কোড স্নিপেটে, access_token টোকেন ভেরিয়েবল অনুমোদিত ব্যবহারকারীর পক্ষে এপিআই অনুরোধ করতে আপনি প্রাপ্ত access_token উপস্থাপন করে। সম্পূর্ণ উদাহরণটি প্রদর্শন করে যে কীভাবে ব্রাউজারের স্থানীয় স্টোরেজে সেই টোকেন সংরক্ষণ করা যায় এবং একটি এপিআই অনুরোধ করার সময় এটি পুনরুদ্ধার করতে পারে।

var xhr = new XMLHttpRequest();
xhr.open('GET',
    'https://www.googleapis.com/drive/v3/about?fields=user&' +
    'access_token=' + params['access_token']);
xhr.onreadystatechange = function (e) {
  console.log(xhr.response);
};
xhr.send(null);

সম্পূর্ণ উদাহরণ

জেএস ক্লায়েন্ট লাইব্রেরি

নমুনা কোড ডেমো

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

নোট করুন যে এই অ্যাপ্লিকেশনটি https://www.googleapis.com/auth/drive.metadata.readonly সুযোগ অ্যাক্সেসের অনুরোধ করে। অ্যাক্সেসটি কেবল একটি জাভাস্ক্রিপ্ট অ্যাপ্লিকেশনে OAuth 2.0 প্রবাহকে কীভাবে শুরু করতে হবে তা প্রদর্শনের জন্য অনুরোধ করা হয়েছে। এই অ্যাপ্লিকেশনটি কোনও API অনুরোধ করে না।

জাভাস্ক্রিপ্ট নমুনা কোড

উপরে প্রদর্শিত হিসাবে, এই কোড নমুনাটি এমন কোনও পৃষ্ঠার জন্য (একটি অ্যাপ্লিকেশন) যা জাভাস্ক্রিপ্টের জন্য গুগল এপিআইএস ক্লায়েন্ট লাইব্রেরি লোড করে এবং OAuth 2.0 প্রবাহ শুরু করে। পৃষ্ঠাটি প্রদর্শিত হয়:

  • একটি বোতাম যা ব্যবহারকারীকে অ্যাপটিতে সাইন ইন করতে দেয়। ব্যবহারকারী যদি আগে অ্যাপটিকে অনুমোদিত না করে থাকে তবে অ্যাপটি OAuth 2.0 প্রবাহ চালু করে।
  • দুটি বোতাম যা ব্যবহারকারীকে হয় অ্যাপ্লিকেশন থেকে সাইন আউট করতে বা অ্যাপ্লিকেশনটিতে পূর্বে প্রদত্ত অ্যাক্সেস প্রত্যাহার করতে দেয়। আপনি যদি কোনও অ্যাপ্লিকেশন থেকে সাইন আউট করেন তবে আপনি অ্যাপটিতে মঞ্জুরিপ্রাপ্ত অ্যাক্সেসটি বাতিল করেননি। অ্যাপটি আপনার পক্ষ থেকে অন্যান্য অনুমোদিত অনুরোধ করতে পারার আগে আপনাকে আবার সাইন ইন করতে হবে তবে পরের বার আপনি অ্যাপটি ব্যবহার করার সময় আপনাকে আর অ্যাক্সেস দিতে হবে না। তবে, আপনি যদি অ্যাক্সেস প্রত্যাহার করেন, তবে আপনাকে আবার অ্যাক্সেস দেওয়ার দরকার নেই do

আপনি আপনার গুগল অ্যাকাউন্টের অনুমতি পৃষ্ঠার মাধ্যমে অ্যাপ্লিকেশনটিতে অ্যাক্সেস প্রত্যাহার করতে পারেন। অ্যাপ্লিকেশনটি গুগল এপিআই ডক্সের জন্য OAuth 2.0 ডেমো হিসাবে তালিকাভুক্ত।

<script>
  var GoogleAuth;
  var SCOPE = 'https://www.googleapis.com/auth/drive.metadata.readonly';
  function handleClientLoad() {
    // Load the API's client and auth2 modules.
    // Call the initClient function after the modules load.
    gapi.load('client:auth2', initClient);
  }

  function initClient() {
    // In practice, your app can retrieve one or more discovery documents.
    var discoveryUrl = 'https://www.googleapis.com/discovery/v1/apis/drive/v3/rest';

    // Initialize the gapi.client object, which app uses to make API requests.
    // Get API key and client ID from API Console.
    // 'scope' field specifies space-delimited list of access scopes.
    gapi.client.init({
        'apiKey': 'YOUR_API_KEY',
        'clientId': 'YOUR_CLIENT_ID',
        'discoveryDocs': [discoveryUrl],
        'scope': SCOPE
    }).then(function () {
      GoogleAuth = gapi.auth2.getAuthInstance();

      // Listen for sign-in state changes.
      GoogleAuth.isSignedIn.listen(updateSigninStatus);

      // Handle initial sign-in state. (Determine if user is already signed in.)
      var user = GoogleAuth.currentUser.get();
      setSigninStatus();

      // Call handleAuthClick function when user clicks on
      //      "Sign In/Authorize" button.
      $('#sign-in-or-out-button').click(function() {
        handleAuthClick();
      });
      $('#revoke-access-button').click(function() {
        revokeAccess();
      });
    });
  }

  function handleAuthClick() {
    if (GoogleAuth.isSignedIn.get()) {
      // User is authorized and has clicked "Sign out" button.
      GoogleAuth.signOut();
    } else {
      // User is not signed in. Start Google auth flow.
      GoogleAuth.signIn();
    }
  }

  function revokeAccess() {
    GoogleAuth.disconnect();
  }

  function setSigninStatus() {
    var user = GoogleAuth.currentUser.get();
    var isAuthorized = user.hasGrantedScopes(SCOPE);
    if (isAuthorized) {
      $('#sign-in-or-out-button').html('Sign out');
      $('#revoke-access-button').css('display', 'inline-block');
      $('#auth-status').html('You are currently signed in and have granted ' +
          'access to this app.');
    } else {
      $('#sign-in-or-out-button').html('Sign In/Authorize');
      $('#revoke-access-button').css('display', 'none');
      $('#auth-status').html('You have not authorized this app or you are ' +
          'signed out.');
    }
  }

  function updateSigninStatus() {
    setSigninStatus();
  }
</script>

<button id="sign-in-or-out-button"
        style="margin-left: 25px">Sign In/Authorize</button>
<button id="revoke-access-button"
        style="display: none; margin-left: 25px">Revoke access</button>

<div id="auth-status" style="display: inline; padding-left: 25px"></div><hr>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script async defer src="https://apis.google.com/js/api.js"
        onload="this.onload=function(){};handleClientLoad()"
        onreadystatechange="if (this.readyState === 'complete') this.onload()">
</script>

OAuth 2.0 শেষ পয়েন্ট

এই কোড নমুনাটি জাভাস্ক্রিপ্টের জন্য গুগল এপিআইএস ক্লায়েন্ট লাইব্রেরি ব্যবহার না করে কীভাবে জাভাস্ক্রিপ্টে OAuth 2.0 প্রবাহ সম্পূর্ণ করতে হয় তা দেখায়। কোডটি এইচটিএমএল পৃষ্ঠার জন্য যা একটি এপিআই অনুরোধ চেষ্টা করার জন্য একটি বোতাম প্রদর্শন করে। আপনি যদি বোতামটি ক্লিক করেন, কোডটি পৃষ্ঠাটি আপনার ব্রাউজারের স্থানীয় স্টোরেজে কোনও API অ্যাক্সেস টোকেন সংরক্ষণ করেছে কিনা তা পরীক্ষা করে দেখায়। যদি তা হয় তবে এটি এপিআই অনুরোধ কার্যকর করে। অন্যথায়, এটি OAuth 2.0 প্রবাহ শুরু করে।

OAuth 2.0 প্রবাহের জন্য পৃষ্ঠাটি এই পদক্ষেপগুলি অনুসরণ করে:

  1. এটি ব্যবহারকারীকে গুগলের OAuth 2.0 সার্ভারের দিকে পরিচালিত করে, যা https://www.googleapis.com/auth/drive.metadata.readonly স্কোপে অ্যাক্সেসের অনুরোধ করে।
  2. এক বা একাধিক অনুরোধিত স্কোপগুলিতে অ্যাক্সেস মঞ্জুরি দেওয়ার (বা অস্বীকার করার) পরে, ব্যবহারকারীকে মূল পৃষ্ঠায় পুনর্নির্দেশ করা হবে যা খণ্ড সনাক্তকারী স্ট্রিংয়ের অ্যাক্সেস টোকনকে পার্স করে।
  3. নমুনা এপিআই অনুরোধটি করতে পৃষ্ঠাটি অ্যাক্সেস টোকেন ব্যবহার করে।

    এপিআই অনুরোধ অনুমোদিত ব্যবহারকারীর গুগল ড্রাইভ অ্যাকাউন্ট সম্পর্কিত তথ্য পুনরুদ্ধার করার জন্য ড্রাইভ এপিআই-এর about.get পদ্ধতিটি কল করে।

  4. যদি অনুরোধটি সফলভাবে সম্পাদিত হয়, তবে ব্রাউজারের ডিবাগিং কনসোলে এপিআই প্রতিক্রিয়া লগ হয়।

আপনি আপনার গুগল অ্যাকাউন্টের অনুমতি পৃষ্ঠার মাধ্যমে অ্যাপ্লিকেশনটিতে অ্যাক্সেস প্রত্যাহার করতে পারেন। অ্যাপ্লিকেশনটি গুগল এপিআই ডক্সের জন্য OAuth 2.0 ডেমো হিসাবে তালিকাভুক্ত হবে।

স্থানীয়ভাবে এই কোডটি চালানোর জন্য, আপনাকে আপনার অনুমোদনের শংসাপত্রের সাথে সম্পর্কিত YOUR_CLIENT_ID এবং YOUR_REDIRECT_URI ভেরিয়েবলের মান নির্ধারণ করতে হবে। YOUR_REDIRECT_URI ভেরিয়েবল একই URL এ সেট করা উচিত যেখানে পৃষ্ঠাটি পরিবেশিত হচ্ছে। মানটি অবশ্যই OAuth 2.0 ক্লায়েন্টের জন্য অনুমোদিত পুনর্নির্দেশের ইউআরআইয়ের একটির সাথে অবশ্যই মিলবে, যা আপনি API Console Credentials page এ কনফিগার করেছেন। যদি এই মানটি অনুমোদিত ইউআরআইয়ের সাথে মেলে না, আপনি একটি redirect_uri_mismatch ত্রুটি পাবেন। আপনার প্রকল্পটি অবশ্যই এই অনুরোধের জন্য উপযুক্ত এপিআই সক্ষম করেছে

<html><head></head><body>
<script>
  var YOUR_CLIENT_ID = 'REPLACE_THIS_VALUE';
  var YOUR_REDIRECT_URI = 'REPLACE_THIS_VALUE';
  var fragmentString = location.hash.substring(1);

  // Parse query string to see if page request is coming from OAuth 2.0 server.
  var params = {};
  var regex = /([^&=]+)=([^&]*)/g, m;
  while (m = regex.exec(fragmentString)) {
    params[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
  }
  if (Object.keys(params).length > 0) {
    localStorage.setItem('oauth2-test-params', JSON.stringify(params) );
    if (params['state'] && params['state'] == 'try_sample_request') {
      trySampleRequest();
    }
  }

  // If there's an access token, try an API request.
  // Otherwise, start OAuth 2.0 flow.
  function trySampleRequest() {
    var params = JSON.parse(localStorage.getItem('oauth2-test-params'));
    if (params && params['access_token']) {
      var xhr = new XMLHttpRequest();
      xhr.open('GET',
          'https://www.googleapis.com/drive/v3/about?fields=user&' +
          'access_token=' + params['access_token']);
      xhr.onreadystatechange = function (e) {
        if (xhr.readyState === 4 && xhr.status === 200) {
          console.log(xhr.response);
        } else if (xhr.readyState === 4 && xhr.status === 401) {
          // Token invalid, so prompt for user permission.
          oauth2SignIn();
        }
      };
      xhr.send(null);
    } else {
      oauth2SignIn();
    }
  }

  /*
   * Create form to request access token from Google's OAuth 2.0 server.
   */
  function oauth2SignIn() {
    // Google's OAuth 2.0 endpoint for requesting an access token
    var oauth2Endpoint = 'https://accounts.google.com/o/oauth2/v2/auth';

    // Create element to open OAuth 2.0 endpoint in new window.
    var form = document.createElement('form');
    form.setAttribute('method', 'GET'); // Send as a GET request.
    form.setAttribute('action', oauth2Endpoint);

    // Parameters to pass to OAuth 2.0 endpoint.
    var params = {'client_id': YOUR_CLIENT_ID,
                  'redirect_uri': YOUR_REDIRECT_URI,
                  'scope': 'https://www.googleapis.com/auth/drive.metadata.readonly',
                  'state': 'try_sample_request',
                  'include_granted_scopes': 'true',
                  'response_type': 'token'};

    // Add form parameters as hidden input values.
    for (var p in params) {
      var input = document.createElement('input');
      input.setAttribute('type', 'hidden');
      input.setAttribute('name', p);
      input.setAttribute('value', params[p]);
      form.appendChild(input);
    }

    // Add form to page and submit it to open the OAuth 2.0 endpoint.
    document.body.appendChild(form);
    form.submit();
  }
</script>

<button onclick="trySampleRequest();">Try sample request</button>
</body></html>

জাভাস্ক্রিপ্ট উত্স বৈধতা নিয়ম

বিকাশকারীদের তাদের অ্যাপ্লিকেশনগুলি সুরক্ষিত রাখতে সহায়তার জন্য গুগল জাভাস্ক্রিপ্ট উত্সগুলিতে নিম্নলিখিত বৈধতা নিয়মগুলি প্রয়োগ করে। আপনার জাভাস্ক্রিপ্ট উত্স এই নিয়ম মেনে চলতে হবে। নীচে উল্লিখিত ডোমেন, হোস্ট এবং স্কিমের সংজ্ঞার জন্য আরএফসি 3986 বিভাগ 3 দেখুন।

বৈধতা বিধি
পরিকল্পনা

ইউআরআইগুলিকে অবশ্যই HTTPS স্কিম ব্যবহার করতে হবে, সাধারণ HTTP নয়। লোকালহোস্ট ইউআরআই (লোকালহোস্ট আইপি ঠিকানা ইউআরআই সহ) এই বিধি থেকে অব্যাহতিপ্রাপ্ত।

হোস্ট

হোস্টগুলি কাঁচা আইপি ঠিকানা হতে পারে না। লোকালহোস্ট আইপি ঠিকানাগুলি এই বিধি থেকে অব্যাহতিপ্রাপ্ত।

ডোমেইন
  • হোস্ট টিএলডি ( শীর্ষ স্তরের ডোমেন ) অবশ্যই সর্বজনীন প্রত্যয় তালিকার অন্তর্ভুক্ত
  • হোস্ট ডোমেনগুলি “googleusercontent.com” হতে পারে না।
  • ইউআরআইগুলিতে ইউআরএল সংক্ষিপ্ত ডোমেনগুলি থাকতে পারে না (যেমন goo.gl ) অ্যাপটি ডোমেনটির মালিক না হলে।
  • চরিত্র ইউআরআইগুলিতে কিছু নির্দিষ্ট অক্ষর থাকতে পারে না:
    • ওয়াইল্ডকার্ডের অক্ষর ( '*' )
    • মুদ্রণযোগ্য এএসসিআইআই অক্ষর
    • অবৈধ শতাংশ এনকোডিং (যে কোনও শতাংশ এনকোডিং যে দুটি চিহ্নের URL এর পরে URL- এনকোডিং ফর্ম অনুসরণ করে না)
    • নাল অক্ষর (একটি এনকোডযুক্ত নুল অক্ষর, উদাহরণস্বরূপ, %00 , %C0%80 )

    বর্ধিত অনুমোদন

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

    উদাহরণস্বরূপ, এমন একটি অ্যাপ্লিকেশন যা লোককে সংগীত ট্র্যাকগুলি নমুনা তৈরি করতে এবং মিক্স তৈরি করতে দেয় সাইন ইন করার সময় খুব কম সংস্থান প্রয়োজন হতে পারে, সাইন ইন করা ব্যক্তির নাম ছাড়া আর কিছুই হতে পারে However তবে, একটি সম্পূর্ণ মিশ্রণটি সংরক্ষণ করার জন্য তাদের Google ড্রাইভে অ্যাক্সেসের প্রয়োজন হবে । বেশিরভাগ লোকেরা এটিকে প্রাকৃতিক দেখতে পাবে যখন তাদের কেবলমাত্র গুগল ড্রাইভে অ্যাক্সেসের জন্য অনুরোধ করা হয়েছিল যখন অ্যাপ্লিকেশনটির আসলে এটির প্রয়োজন ছিল।

    এই ক্ষেত্রে, সাইন-ইন করার সময় অ্যাপ্লিকেশনটি openid এবং profile স্কোপগুলিকে বেসিক সাইন-ইন করতে অনুরোধ করতে পারে এবং তারপরে https://www.googleapis.com/auth/drive.file স্কোপটির অনুরোধ করতে পারে একটি মিশ্রণ সংরক্ষণ করার জন্য প্রথম অনুরোধ।

    নিম্নলিখিত নিয়মগুলি একটি বর্ধিত অনুমোদন থেকে প্রাপ্ত অ্যাক্সেস টোকনে প্রয়োগ হয়:

    • টোকেনটি নতুন, সম্মিলিত অনুমোদনে ঘূর্ণিত কোনও স্কোপের সাথে সম্পর্কিত সংস্থানীয় সংস্থানগুলিতে অ্যাক্সেস করতে ব্যবহার করা যেতে পারে।
    • আপনি যখন অ্যাক্সেস টোকেন পেতে সম্মিলিত অনুমোদনের জন্য রিফ্রেশ টোকেন ব্যবহার করেন, অ্যাক্সেস টোকেন সম্মিলিত অনুমোদনের প্রতিনিধিত্ব করে এবং প্রতিক্রিয়াতে অন্তর্ভুক্ত কোনও scope মানগুলির জন্য ব্যবহার করা যেতে পারে।
    • সম্মিলিত অনুমোদনের মধ্যে এমন সমস্ত স্কোপ অন্তর্ভুক্ত রয়েছে যা ব্যবহারকারীরা বিভিন্ন ক্লায়েন্টের কাছ থেকে অনুদানের অনুরোধ জানানো হলেও এপিআই প্রকল্পে দেয়। উদাহরণস্বরূপ, যদি কোনও ব্যবহারকারী কোনও অ্যাপ্লিকেশনের ডেস্কটপ ক্লায়েন্ট ব্যবহার করে একটি সুযোগে অ্যাক্সেস মঞ্জুর করে এবং তারপরে মোবাইল ক্লায়েন্টের মাধ্যমে একই অ্যাপ্লিকেশনটিকে অন্য সুযোগ দেয় তবে সম্মিলিত অনুমোদনের ক্ষেত্রে উভয় স্কোপ অন্তর্ভুক্ত থাকবে।
    • আপনি যদি একটি টোকেন প্রত্যাহার করেন যা সম্মিলিত অনুমোদনের প্রতিনিধিত্ব করে তবে সংশ্লিষ্ট ব্যবহারকারীর পক্ষ থেকে সেই অনুমোদনের সমস্ত স্কোপে অ্যাক্সেস এক সাথে বাতিল করা হবে are

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

    জেএস ক্লায়েন্ট লাইব্রেরি

    বিদ্যমান অ্যাক্সেস টোকেনে স্কোপগুলি যুক্ত করতে, GoogleUser.grant(options) পদ্ধতিতে কল GoogleUser.grant(options)options অবজেক্টটি অতিরিক্ত স্কোপগুলি চিহ্নিত করে যাতে আপনি অ্যাক্সেস দিতে চান।

    // Space-separated list of additional scope(s) you are requesting access to.
    // This code adds read-only access to the user's calendars via the Calendar API.
    var NEW_SCOPES = 'https://www.googleapis.com/auth/calendar.readonly';
    
    // Retrieve the GoogleUser object for the current user.
    var GoogleUser = GoogleAuth.currentUser.get();
    GoogleUser.grant({'scope': NEW_SCOPES});

    OAuth 2.0 শেষ পয়েন্ট

    একটি বিদ্যমান অ্যাক্সেস টোকেন করার সুযোগ যোগ করার জন্য, অন্তর্ভুক্ত include_granted_scopes আপনার প্যারামিটার Google এর OAuth 2.0 সার্ভারে অনুরোধ

    নিম্নলিখিত কোড স্নিপেট এটি কীভাবে করবেন তা দেখায়। স্নিপেটটি ধরে নিয়েছে যে আপনি ব্রাউজারের স্থানীয় স্টোরেজে আপনার অ্যাক্সেস টোকেন বৈধ, সেই স্কপগুলি সংরক্ষণ করেছেন। ( সম্পূর্ণ উদাহরণ কোডটি oauth2-test-params.scope একটি তালিকা সঞ্চয় করে যার জন্য অ্যাক্সেস টোকেনটি ব্রাউজারের স্থানীয় স্টোরেজে oauth2-test-params.scope সম্পত্তি সেট করে বৈধ হয়))

    স্নিপেট স্কোপগুলির সাথে তুলনা করে যার জন্য অ্যাক্সেস টোকেন কোনও নির্দিষ্ট ক্যোয়ারির জন্য আপনি যে সুযোগটি ব্যবহার করতে চান তার সাথে বৈধ। যদি অ্যাক্সেস টোকেন সেই সুযোগটি না coverেকে দেয়, তবে OAuth 2.0 প্রবাহ শুরু হয়। এখানে, oauth2SignIn ফাংশনটি oauth2SignIn ধাপে সরবরাহ করা সমান (এবং এটি পরে সম্পূর্ণ উদাহরণে সরবরাহ করা হয় )।

    var SCOPE = 'https://www.googleapis.com/auth/drive.metadata.readonly';
    var params = JSON.parse(localStorage.getItem('oauth2-test-params'));
    
    var current_scope_granted = false;
    if (params.hasOwnProperty('scope')) {
      var scopes = params['scope'].split(' ');
      for (var s = 0; s < scopes.length; s++) {
        if (SCOPE == scopes[s]) {
          current_scope_granted = true;
        }
      }
    }
    
    if (!current_scope_granted) {
      oauth2SignIn(); // This function is defined elsewhere in this document.
    } else {
      // Since you already have access, you can proceed with the API request.
    }

    একটি টোকেন প্রত্যাহার করা হচ্ছে

    কিছু ক্ষেত্রে কোনও ব্যবহারকারী কোনও অ্যাপ্লিকেশনটিতে দেওয়া অ্যাক্সেস প্রত্যাহার করতে চাইতে পারে। কোনও অ্যাকাউন্ট অ্যাকাউন্ট সেটিংসে গিয়ে অ্যাক্সেস প্রত্যাহার করতে পারে। আরও তথ্যের জন্য আপনার অ্যাকাউন্ট সমর্থন নথিতে অ্যাক্সেস সহ তৃতীয় পক্ষের সাইটগুলি এবং অ্যাপ্লিকেশনগুলির সরান সাইট বা অ্যাপ্লিকেশন অ্যাক্সেস বিভাগটি দেখুন।

    কোনও অ্যাপ্লিকেশনের পক্ষে প্রোগ্রামটিগতভাবে এতে দেওয়া অ্যাক্সেস প্রত্যাহার করাও সম্ভব। কর্মসূচী প্রত্যাখ্যানগুলি উদাহরণস্বরূপ গুরুত্বপূর্ণ যেখানে কোনও ব্যবহারকারী সাবস্ক্রাইব করে, কোনও অ্যাপ্লিকেশন সরিয়ে দেয় বা অ্যাপ্লিকেশনটির জন্য প্রয়োজনীয় API সংস্থানগুলি উল্লেখযোগ্যভাবে পরিবর্তিত হয়েছে। অন্য কথায়, অপসারণ প্রক্রিয়ার অংশটিতে একটি অ্যাপ্লিকেশন অনুরোধ অন্তর্ভুক্ত থাকতে পারে যাতে অ্যাপ্লিকেশনটিতে পূর্বে দেওয়া অনুমতিগুলি অপসারণ করা হয় ensure

    জেএস ক্লায়েন্ট লাইব্রেরি

    প্রোগ্রামিকভাবে একটি টোকেন প্রত্যাহার করতে, GoogleAuth.disconnect() কল করুন:

    GoogleAuth.disconnect();

    OAuth 2.0 শেষ পয়েন্ট

    প্রোগ্রামিকভাবে একটি টোকেন প্রত্যাহার করতে, আপনার অ্যাপ্লিকেশনটি https://oauth2.googleapis.com/revoke একটি অনুরোধ করে এবং টোকেনটিকে প্যারামিটার হিসাবে অন্তর্ভুক্ত করে:

    curl -d -X -POST --header "Content-type:application/x-www-form-urlencoded" \
            https://oauth2.googleapis.com/revoke?token={token}

    টোকেনটি অ্যাক্সেস টোকেন বা রিফ্রেশ টোকেন হতে পারে। যদি টোকেনটি একটি অ্যাক্সেস টোকেন হয় এবং এটিতে একটি সম্পর্কিত রিফ্রেশ টোকেন থাকে তবে রিফ্রেশ টোকেনটিও প্রত্যাহার করা হবে।

    If the revocation is successfully processed, then the HTTP status code of the response is 200 . For error conditions, an HTTP status code 400 is returned along with an error code.

    The following JavaScript snippet shows how to revoke a token in JavaScript without using the Google APIs Client Library for JavaScript. Since the Google's OAuth 2.0 endpoint for revoking tokens does not support Cross-origin Resource Sharing (CORS), the code creates a form and submits the form to the endpoint rather than using the XMLHttpRequest() method to post the request.

    function revokeAccess(accessToken) {
      // Google's OAuth 2.0 endpoint for revoking access tokens.
      var revokeTokenEndpoint = 'https://oauth2.googleapis.com/revoke';
    
      // Create <form> element to use to POST data to the OAuth 2.0 endpoint.
      var form = document.createElement('form');
      form.setAttribute('method', 'post');
      form.setAttribute('action', revokeTokenEndpoint);
    
      // Add access token to the form so it is set as value of 'token' parameter.
      // This corresponds to the sample curl request, where the URL is:
      //      https://oauth2.googleapis.com/revoke?token={token}
      var tokenField = document.createElement('input');
      tokenField.setAttribute('type', 'hidden');
      tokenField.setAttribute('name', 'token');
      tokenField.setAttribute('value', accessToken);
      form.appendChild(tokenField);
    
      // Add form to page and submit it to actually revoke the token.
      document.body.appendChild(form);
      form.submit();
    }