JavaScript ওয়েব অ্যাপ্লিকেশনের জন্য OAuth 2.0 ব্যবহার করা

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

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

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

গুগল এপিআই ক্লায়েন্ট লাইব্রেরি এবং গুগল আইডেন্টিটি সার্ভিসেস

যদি আপনি Google-এ অনুমোদিত কল করার জন্য JavaScript-এর জন্য Google API-এর ক্লায়েন্ট লাইব্রেরি ব্যবহার করেন, তাহলে OAuth 2.0 ফ্লো পরিচালনা করার জন্য আপনার Google Identity Services JavaScript লাইব্রেরি ব্যবহার করা উচিত। অনুগ্রহ করে Google identity Services-এর টোকেন মডেল দেখুন, যা OAuth 2.0 অন্তর্নিহিত অনুদান প্রবাহের উপর ভিত্তি করে তৈরি।

পূর্বশর্ত

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

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

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

  1. Open the API Library মধ্যে Google API Console.
  2. If prompted, select a project, or create a new one.
  3. YouTube Data API খুঁজে বের করতে এবং সক্ষম করতে লাইব্রেরি পৃষ্ঠাটি ব্যবহার করুন। আপনার অ্যাপ্লিকেশন ব্যবহার করবে এমন অন্য কোনও API খুঁজুন এবং সেগুলিও সক্ষম করুন।

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

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

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

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

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

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

YouTube Data API v3 নিম্নলিখিত স্কোপ ব্যবহার করে:

ব্যাপ্তি বর্ণনা
https://www. googleapis. com/ auth/ youtube আপনার YouTube অ্যাকাউন্ট পরিচালনা করুন
https://www. googleapis. com/ auth/ youtube. channel-memberships. creator আপনার বর্তমান সক্রিয় চ্যানেল সদস্যদের তালিকা, তাদের বর্তমান স্তর এবং তারা কখন সদস্য হয়েছেন তা দেখুন
https://www. googleapis. com/ auth/ youtube. force-ssl আপনার YouTube ভিডিও, রেটিং, মন্তব্য এবং ক্যাপশনগুলি দেখুন, সম্পাদনা করুন এবং স্থায়ীভাবে মুছুন৷
https://www. googleapis. com/ auth/ youtube. readonly আপনার YouTube অ্যাকাউন্ট দেখুন
https://www. googleapis. com/ auth/ youtube. upload আপনার YouTube ভিডিও পরিচালনা করুন
https://www. googleapis. com/ auth/ youtubepartner YouTube-এ আপনার সম্পদ এবং সংশ্লিষ্ট বিষয়বস্তু দেখুন ও পরিচালনা করুন
https://www. googleapis. com/ auth/ youtubepartner-channel-audit একটি YouTube অংশীদারের সাথে অডিট প্রক্রিয়া চলাকালীন প্রাসঙ্গিক আপনার YouTube চ্যানেলের ব্যক্তিগত তথ্য দেখুন৷

OAuth 2.0 API Scopes ডকুমেন্টে এমন স্কোপের একটি সম্পূর্ণ তালিকা রয়েছে যা আপনি Google API অ্যাক্সেস করতে ব্যবহার করতে পারেন।

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

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

ধাপ ১: Google এর OAuth 2.0 সার্ভারে পুনঃনির্দেশ করুন

ব্যবহারকারীর ডেটা অ্যাক্সেস করার অনুমতি চাইতে, ব্যবহারকারীকে Google এর OAuth 2.0 সার্ভারে পুনঃনির্দেশিত করুন।

OAuth 2.0 এন্ডপয়েন্ট

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

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

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

আপনার আবেদনের ক্লায়েন্ট আইডি। আপনি এই মানটি খুঁজে পেতে পারেন Cloud ConsoleClients page.

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

ব্যবহারকারী অনুমোদন প্রবাহ সম্পন্ন করার পর API সার্ভার ব্যবহারকারীকে কোথায় পুনঃনির্দেশিত করবে তা নির্ধারণ করে। মানটি অবশ্যই OAuth 2.0 ক্লায়েন্টের জন্য অনুমোদিত পুনঃনির্দেশ URI-এর সাথে হুবহু মিলতে হবে, যা আপনি আপনার ক্লায়েন্টের Cloud ConsoleClients page. যদি এই মানটি প্রদত্ত client_id জন্য অনুমোদিত পুনঃনির্দেশ URI-এর সাথে না মেলে, তাহলে আপনি একটি redirect_uri_mismatch ত্রুটি পাবেন।

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

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

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

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

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

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

YouTube Data API v3 নিম্নলিখিত স্কোপ ব্যবহার করে:

ব্যাপ্তি বর্ণনা
https://www. googleapis. com/ auth/ youtube আপনার YouTube অ্যাকাউন্ট পরিচালনা করুন
https://www. googleapis. com/ auth/ youtube. channel-memberships. creator আপনার বর্তমান সক্রিয় চ্যানেল সদস্যদের তালিকা, তাদের বর্তমান স্তর এবং তারা কখন সদস্য হয়েছেন তা দেখুন
https://www. googleapis. com/ auth/ youtube. force-ssl আপনার YouTube ভিডিও, রেটিং, মন্তব্য এবং ক্যাপশনগুলি দেখুন, সম্পাদনা করুন এবং স্থায়ীভাবে মুছুন৷
https://www. googleapis. com/ auth/ youtube. readonly আপনার YouTube অ্যাকাউন্ট দেখুন
https://www. googleapis. com/ auth/ youtube. upload আপনার YouTube ভিডিও পরিচালনা করুন
https://www. googleapis. com/ auth/ youtubepartner YouTube-এ আপনার সম্পদ এবং সংশ্লিষ্ট বিষয়বস্তু দেখুন ও পরিচালনা করুন
https://www. googleapis. com/ auth/ youtubepartner-channel-audit একটি YouTube অংশীদারের সাথে অডিট প্রক্রিয়া চলাকালীন প্রাসঙ্গিক আপনার YouTube চ্যানেলের ব্যক্তিগত তথ্য দেখুন৷

OAuth 2.0 API Scopes ডকুমেন্টে Google API অ্যাক্সেস করার জন্য আপনি যে স্কোপগুলি ব্যবহার করতে পারেন তার একটি সম্পূর্ণ তালিকা রয়েছে।

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

state প্রস্তাবিত

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

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

include_granted_scopes ঐচ্ছিক

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

login_hint ঐচ্ছিক

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

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

prompt ঐচ্ছিক

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

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

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

Google এর অনুমোদন সার্ভারে নমুনা পুনর্নির্দেশনা

নিচের নমুনা URLটি এমন একটি স্কোপে অফলাইন অ্যাক্সেস ( access_type=offline ) অনুরোধ করে যা ব্যবহারকারীর YouTube অ্যাকাউন্ট দেখার অ্যাক্সেসের অনুমতি দেয়। এটি ক্রমবর্ধমান অনুমোদন ব্যবহার করে নিশ্চিত করে যে নতুন অ্যাক্সেস টোকেন ব্যবহারকারী পূর্বে অ্যাপ্লিকেশন অ্যাক্সেস মঞ্জুর করেছেন এমন যেকোনো স্কোপকে কভার করে। URLটি প্রয়োজনীয় redirect_uri , response_type , এবং client_id প্যারামিটারের পাশাপাশি state প্যারামিটারের জন্য মানও সেট করে। URLটিতে পঠনযোগ্যতার জন্য লাইন ব্রেক এবং স্পেস রয়েছে।

https://accounts.google.com/o/oauth2/v2/auth?
 scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.readonly&
 include_granted_scopes=true&
 state=state_parameter_passthrough_value&
 redirect_uri=http%3A%2F%2Flocalhost%2Foauth2callback&
 response_type=token&
 client_id=client_id

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

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

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

/*
 * 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/youtube.force-ssl',
                '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();
}

ধাপ ২: Google ব্যবহারকারীর কাছ থেকে সম্মতির অনুরোধ জানায়

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

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

ত্রুটি

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

admin_policy_enforced

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

disallowed_useragent

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

iOS এবং macOS ডেভেলপাররা WKWebView এ অনুমোদনের অনুরোধ খোলার সময় এই ত্রুটির সম্মুখীন হতে পারেন। ডেভেলপারদের পরিবর্তে iOS লাইব্রেরি ব্যবহার করা উচিত যেমন iOS-এর জন্য Google Sign-In অথবা iOS-এর জন্য OpenID Foundation-এর AppAuth

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

org_internal

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

invalid_client

যে উৎস থেকে অনুরোধটি করা হয়েছে তা এই ক্লায়েন্টের জন্য অনুমোদিত নয়। origin_mismatch দেখুন।

deleted_client

অনুরোধটি করার জন্য ব্যবহৃত OAuth ক্লায়েন্টটি মুছে ফেলা হয়েছে। অব্যবহৃত ক্লায়েন্টের ক্ষেত্রে মুছে ফেলা ম্যানুয়ালি বা স্বয়ংক্রিয়ভাবে ঘটতে পারে। মুছে ফেলা ক্লায়েন্টগুলি মুছে ফেলার 30 দিনের মধ্যে পুনরুদ্ধার করা যেতে পারে। আরও জানুন

invalid_grant

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

origin_mismatch

অনুমোদনের অনুরোধটি তৈরি করা জাভাস্ক্রিপ্টের স্কিম, ডোমেন এবং/অথবা পোর্ট OAuth ক্লায়েন্ট আইডির জন্য নিবন্ধিত কোনও অনুমোদিত জাভাস্ক্রিপ্ট অরিজিন URI-এর সাথে নাও মিলতে পারে। অনুমোদিত জাভাস্ক্রিপ্ট অরিজিন পর্যালোচনা করুন Google Cloud ConsoleClients page.

redirect_uri_mismatch

অনুমোদনের অনুরোধে পাস করা redirect_uri OAuth ক্লায়েন্ট আইডির জন্য অনুমোদিত পুনর্নির্দেশ URI-এর সাথে মেলে না। অনুমোদিত পুনর্নির্দেশ URI গুলি পর্যালোচনা করুন Google Cloud ConsoleClients page.

অনুমোদনের অনুরোধটি তৈরি করা জাভাস্ক্রিপ্টের স্কিম, ডোমেন এবং/অথবা পোর্ট OAuth ক্লায়েন্ট আইডির জন্য নিবন্ধিত কোনও অনুমোদিত জাভাস্ক্রিপ্ট অরিজিন URI-এর সাথে নাও মিলতে পারে। অনুমোদিত জাভাস্ক্রিপ্ট অরিজিন পর্যালোচনা করুন Google Cloud ConsoleClients page.

redirect_uri প্যারামিটারটি OAuth আউট-অফ-ব্যান্ড (OOB) ফ্লোকে নির্দেশ করতে পারে যা বন্ধ করে দেওয়া হয়েছে এবং আর সমর্থিত নয়। আপনার ইন্টিগ্রেশন আপডেট করতে মাইগ্রেশন গাইডটি দেখুন।

invalid_request

আপনার অনুরোধে কিছু সমস্যা ছিল। এটি বিভিন্ন কারণে হতে পারে:

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

ধাপ ৩: OAuth 2.0 সার্ভারের প্রতিক্রিয়া পরিচালনা করুন

OAuth 2.0 এন্ডপয়েন্ট

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

যদি ব্যবহারকারী অনুরোধটি অনুমোদন করে, তাহলে প্রতিক্রিয়াটিতে একটি অ্যাক্সেস টোকেন থাকে। যদি ব্যবহারকারী অনুরোধটি অনুমোদন না করে, তাহলে প্রতিক্রিয়াটিতে একটি ত্রুটি বার্তা থাকে। অ্যাক্সেস টোকেন বা ত্রুটি বার্তাটি পুনঃনির্দেশ 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-এ ক্লিক করে এই প্রবাহটি পরীক্ষা করতে পারেন, যা আপনার Google ড্রাইভের ফাইলগুলির মেটাডেটা দেখার জন্য কেবল পঠনযোগ্য অ্যাক্সেস এবং আপনার Google ক্যালেন্ডার ইভেন্টগুলি দেখার জন্য কেবল পঠনযোগ্য অ্যাক্সেসের অনুরোধ করে:

https://accounts.google.com/o/oauth2/v2/auth?
 scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.readonly&
 include_granted_scopes=true&
 state=state_parameter_passthrough_value&
 redirect_uri=http%3A%2F%2Flocalhost%2Foauth2callback&
 response_type=token&
 client_id=client_id

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

ধাপ ৪: ব্যবহারকারীরা কোন স্কোপগুলি দিয়েছেন তা পরীক্ষা করুন

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

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

আরও বিস্তারিত তথ্যের জন্য, কীভাবে গ্রানুলার অনুমতিগুলি পরিচালনা করবেন তা দেখুন।

OAuth 2.0 এন্ডপয়েন্ট

ব্যবহারকারী আপনার অ্যাপ্লিকেশনটিকে একটি নির্দিষ্ট স্কোপে অ্যাক্সেস দিয়েছে কিনা তা পরীক্ষা করতে, অ্যাক্সেস টোকেন প্রতিক্রিয়ার scope ক্ষেত্রটি পরীক্ষা করুন। অ্যাক্সেস_টোকেন দ্বারা প্রদত্ত অ্যাক্সেসের স্কোপগুলি স্থান-বিভাজিত, কেস-সংবেদনশীল স্ট্রিংগুলির তালিকা হিসাবে প্রকাশ করা হয়।

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

  {
    "access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
    "expires_in": 3920,
    "token_type": "Bearer",
    "scope": "https://www.googleapis.com/auth/youtube.force-ssl",
    "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI"
  }

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

OAuth 2.0 এন্ডপয়েন্ট

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

মনে রাখবেন যে YouTube ডেটা API শুধুমাত্র সেইসব YouTube কন্টেন্ট মালিকদের জন্য পরিষেবা অ্যাকাউন্ট সমর্থন করে যারা রেকর্ড লেবেল এবং মুভি স্টুডিওর মতো একাধিক YouTube চ্যানেলের মালিক এবং পরিচালনা করেন।

আপনি OAuth 2.0 Playground- এ সমস্ত Google API ব্যবহার করে দেখতে পারেন এবং তাদের স্কোপ দেখতে পারেন।

HTTP GET উদাহরণ

Authorization: Bearer HTTP হেডার ব্যবহার করে youtube.channels এন্ডপয়েন্টে (YouTube Data API) কল করলে এটি দেখতে নিচের মতো হতে পারে। মনে রাখবেন, আপনাকে নিজের অ্যাক্সেস টোকেন নির্দিষ্ট করতে হবে:

GET /youtube/v3/channels?part=snippet&mine=true HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer access_token

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

GET https://www.googleapis.com/youtube/v3/channels?access_token=access_token&part=snippet&mine=true

curl উদাহরণ

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

curl -H "Authorization: Bearer access_token" https://www.googleapis.com/youtube/v3/channels?part=snippet&mine=true

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

curl https://www.googleapis.com/youtube/v3/channels?access_token=access_token&part=snippet&mine=true

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

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

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

var xhr = new XMLHttpRequest();
xhr.open('GET',
    'https://www.googleapis.com/youtube/v3/channels?part=snippet&mine=true&' +
    'access_token=' + params['access_token']);
xhr.onreadystatechange = function (e) {
  console.log(xhr.response);
};
xhr.send(null);

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

OAuth 2.0 এন্ডপয়েন্ট

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

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

  1. এটি ব্যবহারকারীকে Google এর OAuth 2.0 সার্ভারের দিকে পরিচালিত করে, যা https://www.googleapis.com/auth/youtube.force-ssl স্কোপে অ্যাক্সেসের অনুরোধ করে।
  2. এক বা একাধিক অনুরোধকৃত স্কোপে অ্যাক্সেস মঞ্জুর (বা অস্বীকার) করার পরে, ব্যবহারকারীকে মূল পৃষ্ঠায় পুনঃনির্দেশিত করা হয়, যা ফ্র্যাগমেন্ট আইডেন্টিফায়ার স্ট্রিং থেকে অ্যাক্সেস টোকেনটি পার্স করে।
  3. কোন স্কোপ ব্যবহারকারী অ্যাপ্লিকেশনটিতে অ্যাক্সেস দিয়েছেন তা পৃষ্ঠাটি পরীক্ষা করে।
  4. যদি ব্যবহারকারী অনুরোধকৃত scope(s) গুলিতে অ্যাক্সেস মঞ্জুর করে থাকেন, তাহলে পৃষ্ঠাটি নমুনা API অনুরোধ করার জন্য অ্যাক্সেস টোকেন ব্যবহার করে।

    এই API অনুরোধটি অনুমোদিত ব্যবহারকারীর YouTube চ্যানেল সম্পর্কে ডেটা পুনরুদ্ধার করার জন্য YouTube Data API এর channels.list পদ্ধতিকে কল করে।

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

আপনার Google অ্যাকাউন্টের অনুমতি পৃষ্ঠার মাধ্যমে আপনি অ্যাপটিতে অ্যাক্সেস প্রত্যাহার করতে পারেন। ক্লায়েন্ট আইডি তৈরির সময় OAuth সম্মতি স্ক্রিনের মধ্যে ব্র্যান্ডিং পৃষ্ঠায় প্রদত্ত অ্যাপ্লিকেশনের নাম হিসাবে অ্যাপটি তালিকাভুক্ত করা হয়।

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

<html><head></head><body>
<script>
  var YOUR_CLIENT_ID = 'REPLACE_THIS_VALUE';
  var YOUR_REDIRECT_URI = 'REPLACE_THIS_VALUE';

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

      trySampleRequest();
    } else {
      console.log('State mismatch. Possible CSRF attack');
    }
  }

  // Function to generate a random state value
  function generateCryptoRandomState() {
    const randomValues = new Uint32Array(2);
    window.crypto.getRandomValues(randomValues);

    // Encode as UTF-8
    const utf8Encoder = new TextEncoder();
    const utf8Array = utf8Encoder.encode(
      String.fromCharCode.apply(null, randomValues)
    );

    // Base64 encode the UTF-8 data
    return btoa(String.fromCharCode.apply(null, utf8Array))
      .replace(/\+/g, '-')
      .replace(/\//g, '_')
      .replace(/=+$/, '');
  }

  // 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/youtube/v3/channels?part=snippet&mine=true&' +
          '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() {
    // create random state value and store in local storage
    var state = generateCryptoRandomState();
    localStorage.setItem('state', state);

    // 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/youtube.force-ssl',
                  'state': state,
                  '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>

জাভাস্ক্রিপ্টের উৎপত্তি যাচাইকরণের নিয়ম

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

বৈধকরণের নিয়ম
পরিকল্পনা

জাভাস্ক্রিপ্ট অরিজিনগুলিকে HTTPS স্কিম ব্যবহার করতে হবে, প্লেইন HTTP নয়। Localhost URI গুলি (localhost IP ঠিকানা URI সহ) এই নিয়ম থেকে মুক্ত।

হোস্ট

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

ডোমেইন
  • হোস্ট টিএলডি ( টপ লেভেল ডোমেইন ) অবশ্যই পাবলিক সাফিক্স তালিকার অন্তর্গত হতে হবে।
  • হোস্ট ডোমেনগুলি “googleusercontent.com” হতে পারে না।
  • জাভাস্ক্রিপ্ট অরিজিনে URL শর্টনার ডোমেন (যেমন goo.gl ) থাকতে পারে না যদি না অ্যাপটি ডোমেনটির মালিক হয়।
  • ব্যবহারকারীর তথ্য

    জাভাস্ক্রিপ্টের অরিজিনে userinfo সাবকম্পোনেন্ট থাকতে পারে না।

    পথ

    জাভাস্ক্রিপ্টের অরিজিনে পাথ কম্পোনেন্ট থাকতে পারে না।

    প্রশ্ন

    জাভাস্ক্রিপ্টের অরিজিনে কোয়েরি কম্পোনেন্ট থাকতে পারে না।

    খণ্ড

    জাভাস্ক্রিপ্টের অরিজিনে ফ্র্যাগমেন্ট কম্পোনেন্ট থাকতে পারে না।

    চরিত্র জাভাস্ক্রিপ্টের উৎসে নির্দিষ্ট কিছু অক্ষর থাকতে পারে না, যার মধ্যে রয়েছে:
    • ওয়াইল্ডকার্ড অক্ষর ( '*' )
    • মুদ্রণযোগ্য নয় এমন ASCII অক্ষর
    • অবৈধ শতাংশ এনকোডিং (যেকোনো শতাংশ এনকোডিং যা দুটি হেক্সাডেসিমেল সংখ্যার পরে শতাংশ চিহ্নের URL-এনকোডিং ফর্ম অনুসরণ করে না)
    • নাল অক্ষর (একটি এনকোডেড NULL অক্ষর, যেমন, %00 , %C0%80 )

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

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

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

    এই ক্ষেত্রে, সাইন-ইন করার সময়, অ্যাপটির কোনও স্কোপের অ্যাক্সেসের প্রয়োজন নাও হতে পারে বা অনুরোধ নাও করতে পারে। তবে, যদি ব্যবহারকারী কোনও ভিডিও রেট করার চেষ্টা করেন, কোনও প্লেলিস্টে একটি ভিডিও যোগ করার চেষ্টা করেন, অথবা অন্য কোনও YouTube অ্যাকশন সম্পাদন করেন, তাহলে অ্যাপটি https://www.googleapis.com/auth/youtube.force-ssl স্কোপে অ্যাক্সেসের অনুরোধ করতে পারে। একইভাবে, ব্যবহারকারী যদি কোনও ক্যালেন্ডার ইভেন্ট যোগ করার চেষ্টা করেন তবে অ্যাপটি https://www.googleapis.com/auth/calendar স্কোপে অ্যাক্সেসের অনুরোধ করতে পারে।

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

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

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

    OAuth 2.0 এন্ডপয়েন্ট

    এই উদাহরণে, কলিং অ্যাপ্লিকেশনটি ব্যবহারকারীর YouTube Analytics ডেটা পুনরুদ্ধারের জন্য অ্যাক্সেসের অনুরোধ করে, পাশাপাশি ব্যবহারকারী ইতিমধ্যে অ্যাপ্লিকেশনটিকে যে অন্যান্য অ্যাক্সেস দিয়েছেন তাও অনুরোধ করে।

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

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

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

    var SCOPE = 'https://www.googleapis.com/auth/youtube.force-ssl';
    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 রিসোর্সগুলি উল্লেখযোগ্যভাবে পরিবর্তিত হয়, তখন প্রোগ্রাম্যাটিক প্রত্যাহার গুরুত্বপূর্ণ। অন্য কথায়, অপসারণ প্রক্রিয়ার অংশে একটি API অনুরোধ অন্তর্ভুক্ত থাকতে পারে যাতে অ্যাপ্লিকেশনটিকে পূর্বে প্রদত্ত অনুমতিগুলি সরানো হয়।

    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}

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

    যদি প্রত্যাহার সফলভাবে প্রক্রিয়া করা হয়, তাহলে প্রতিক্রিয়ার HTTP স্থিতি কোড 200 হবে। ত্রুটির অবস্থার জন্য, একটি HTTP স্থিতি কোড 400 একটি ত্রুটি কোড সহ ফেরত পাঠানো হয়।

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

    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();
    }

    ক্রস-অ্যাকাউন্ট সুরক্ষা বাস্তবায়ন

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

    Google-এর ক্রস-অ্যাকাউন্ট সুরক্ষা পরিষেবা আপনার অ্যাপে যে ধরণের ইভেন্ট পাঠিয়েছে তার কিছু উদাহরণ হল:

    • https://schemas.openid.net/secevent/risc/event-type/sessions-revoked
    • https://schemas.openid.net/secevent/oauth/event-type/token-revoked
    • https://schemas.openid.net/secevent/risc/event-type/account-disabled

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