দানাদার অনুমতিগুলি কীভাবে পরিচালনা করবেন

ওভারভিউ

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

দানাদার অনুমতি কি?

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

যখন একাধিক অ-সাইন-ইন সুযোগ অনুরোধ করা হয়

সাইন-ইন এবং নন-সাইন-ইন স্কোপ

যে অ্যাপ্লিকেশনগুলি সাইন-ইন এবং নন-সাইন-ইন স্কোপের জন্য অনুরোধ করে, ব্যবহারকারীরা প্রথমে সাইন-ইন স্কোপের জন্য সম্মতি পৃষ্ঠাটি দেখুন ( email , profile , এবং openid )। ব্যবহারকারীরা তাদের মৌলিক পরিচয় তথ্য (নাম, ইমেল ঠিকানা, এবং প্রোফাইল ফটো) শেয়ার করতে সম্মতি দেওয়ার পরে, ব্যবহারকারীরা সাইন-ইন না করার সুযোগগুলির জন্য একটি দানাদার অনুমতি সম্মতি স্ক্রীন দেখতে পাবেন। এই ক্ষেত্রে, অ্যাপ্লিকেশনটিকে অবশ্যই পরীক্ষা করতে হবে যে ব্যবহারকারীরা কোন স্কোপগুলি মঞ্জুর করেছেন এবং অনুমান করতে পারবেন না যে ব্যবহারকারীরা অনুরোধ করা সমস্ত সুযোগগুলি মঞ্জুর করেছেন৷ নিম্নলিখিত উদাহরণে, ওয়েব অ্যাপ্লিকেশন তিনটি সাইন-ইন স্কোপ এবং একটি Google ড্রাইভ নন-সাইন-ইন সুযোগের জন্য অনুরোধ করে৷ ব্যবহারকারীরা সাইন-ইন স্কোপগুলিতে সম্মতি দেওয়ার পরে, ব্যবহারকারীরা Google ড্রাইভ অনুমতির জন্য দানাদার অনুমতি সম্মতি স্ক্রীন দেখতে পাবেন:

সাইন-ইন এবং নন-সাইন-ইন স্কোপ

একাধিক নন-সাইন-ইন সুযোগ

যখন অ্যাপ্লিকেশন একাধিক নন-সাইন-ইন সুযোগের অনুরোধ করে তখন ব্যবহারকারীদের কাছে একটি দানাদার অনুমতি সম্মতি স্ক্রীন প্রদর্শিত হবে। ব্যবহারকারীরা অ্যাপ্লিকেশনের সাথে ভাগ করার জন্য কোন অনুমতিগুলি অনুমোদন করতে চান তা নির্বাচন করতে পারেন৷ ব্যবহারকারীর Gmail বার্তা এবং Google ক্যালেন্ডার ডেটাতে অ্যাক্সেসের অনুরোধ করার জন্য নীচের একটি উদাহরণ দানাদার অনুমতি সম্মতি স্ক্রীন:

একাধিক নন-সাইন-ইন সুযোগ

যে অ্যাপ্লিকেশনগুলি শুধুমাত্র সাইন-ইন স্কোপের জন্য অনুরোধ করে ( email , profile , এবং openid ), দানাদার অনুমতি সম্মতি পর্দা প্রযোজ্য নয়৷ ব্যবহারকারীরা হয় সম্পূর্ণ সাইন-ইন অনুরোধ অনুমোদন বা অস্বীকার করে। অন্য কথায়, যদি অ্যাপ্লিকেশনগুলি শুধুমাত্র সাইন-ইন স্কোপের জন্য অনুরোধ করে (এক, দুই, বা তিনটি), দানাদার অনুমতি সম্মতি পর্দা প্রযোজ্য নয়।

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

সাইন-ইন স্কোপের সংখ্যা নন-সাইন-ইন স্কোপের সংখ্যা দানাদার অনুমতি সম্মতি স্ক্রীন
1-3 0 প্রযোজ্য নয়
1-3 1+ প্রযোজ্য
0 1 প্রযোজ্য নয়
0 2+ প্রযোজ্য

আপনার অ্যাপ্লিকেশন প্রভাবিত হয় কিনা তা নির্ধারণ করুন

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

আপনার অ্যাপ্লিকেশন একাধিক স্কোপ ব্যবহার করছে কিনা তা কীভাবে নির্ধারণ করবেন

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

আপনার আবেদন কোড পরিদর্শন করুন

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

গুগল আইডেন্টিটি সার্ভিসেস

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

const client = google.accounts.oauth2.initTokenClient({
  client_id: 'YOUR_CLIENT_ID',
  scope: 'https://www.googleapis.com/auth/calendar.readonly \
  https://www.googleapis.com/auth/contacts.readonly',
  callback: (response) => {
    ...
  },
});

পাইথন

নিম্নলিখিত কোড স্নিপেট অনুমোদনের অনুরোধ তৈরি করতে google-auth-oauthlib.flow মডিউল ব্যবহার করে; scope প্যারামিটারে দুটি অ-সাইন-ইন স্কোপ রয়েছে। ওয়েব অ্যাপ্লিকেশন ব্যবহারকারীদের কাছ থেকে অনুমোদনের অনুরোধ করলে দানাদার অনুমতি সম্মতি স্ক্রীন প্রদর্শিত হবে।

import google.oauth2.credentials
import google_auth_oauthlib.flow

# Use the client_secret.json file to identify the application requesting
# authorization. The client ID (from that file) and access scopes are required.
flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file(
    'client_secret.json',
    scopes=['https://www.googleapis.com/auth/calendar.readonly',
                    'https://www.googleapis.com/auth/contacts.readonly'])

Node.js

নিম্নলিখিত কোড স্নিপেটটি একটি google.auth.OAuth2 অবজেক্ট তৈরি করে, যা অনুমোদনের অনুরোধে প্যারামিটারগুলিকে সংজ্ঞায়িত করে যার scope প্যারামিটারে দুটি অ-সাইন-ইন স্কোপ রয়েছে৷ ওয়েব অ্যাপ ব্যবহারকারীদের কাছ থেকে অনুমোদনের অনুরোধ করলে দানাদার অনুমতি সম্মতি স্ক্রীন প্রদর্শিত হবে।

const {google} = require('googleapis');

/**
  * To use OAuth2 authentication, we need access to a CLIENT_ID, CLIENT_SECRET, AND REDIRECT_URI
  * from the client_secret.json file. To get these credentials for your application, visit
  * https://console.cloud.google.com/apis/credentials.
  */
const oauth2Client = new google.auth.OAuth2(
  YOUR_CLIENT_ID,
  YOUR_CLIENT_SECRET,
  YOUR_REDIRECT_URL
);

// Access scopes for read-only Calendar and Contacts.
const scopes = [
  'https://www.googleapis.com/auth/calendar.readonly',
  'https://www.googleapis.com/auth/contacts.readonly']
];

// Generate a url that asks permissions
const authorizationUrl = oauth2Client.generateAuthUrl({
  // 'online' (default) or 'offline' (gets refresh_token)
  access_type: 'offline',
  /** Pass in the scopes array defined above.
    * Alternatively, if only one scope is needed, you can pass a scope URL as a string */
  scope: scopes,
  // Enable incremental authorization. Recommended as best practices.
  include_granted_scopes: true
});

আউটগোয়িং নেটওয়ার্ক কল পরিদর্শন করুন

নেটওয়ার্ক কল পরিদর্শন করার পদ্ধতি আপনার অ্যাপ্লিকেশন ক্লায়েন্ট প্রকারের উপর নির্ভর করে পরিবর্তিত হবে।

নেটওয়ার্ক কলগুলি পরিদর্শন করার সময়, Google OAuth অনুমোদনের শেষ পয়েন্টগুলিতে পাঠানো অনুরোধগুলি দেখুন এবং scope প্যারামিটার পরীক্ষা করুন৷

এই মানগুলির কারণে দানাদার অনুমতির সম্মতি স্ক্রীন দেখানো হয়।

  • scope প্যারামিটারে সাইন-ইন স্কোপ এবং অ-সাইন-ইন স্কোপ রয়েছে।

    নিম্নলিখিত নমুনা অনুরোধে ব্যবহারকারীর Google ড্রাইভ ফাইলগুলির মেটাডেটা দেখার জন্য তিনটি সাইন-ইন স্কোপ এবং একটি অ-সাইন-ইন স্কোপ রয়েছে:

    https://accounts.google.com/o/oauth2/v2/auth?
    access_type=offline&
    scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile%20openid%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.metadata.readonly&
    include_granted_scopes=true&
    response_type=code&
    redirect_uri=YOUR_REDIRECT_URL&
    client_id=YOUR_CLIENT_ID
  • scope প্যারামিটারে একাধিক নন-সাইন-ইন সুযোগ রয়েছে।

    নিম্নলিখিত নমুনা অনুরোধে ব্যবহারকারীর Google ড্রাইভ মেটাডেটা দেখতে এবং নির্দিষ্ট Google ড্রাইভ ফাইলগুলি পরিচালনা করার জন্য দুটি অ-সাইন-ইন স্কোপ রয়েছে:

  • https://accounts.google.com/o/oauth2/v2/auth?
    access_type=offline&
    scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.metadata.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.file&
    include_granted_scopes=true&
    response_type=code&
    redirect_uri=YOUR_REDIRECT_URL&
    client_id=YOUR_CLIENT_ID

দানাদার অনুমতিগুলি পরিচালনা করার জন্য সর্বোত্তম অনুশীলন

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

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

দানাদার অনুমতিগুলি পরিচালনা করতে আপনার আবেদন আপডেট করুন

অ্যান্ড্রয়েড অ্যাপ্লিকেশন

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

আপনি যদি Google OAuth 2.0-এর সাথে ইন্টারঅ্যাক্ট করার জন্য Play পরিষেবাগুলি থেকে auth.api.signin SDK ব্যবহার করেন, তাহলে আপনি প্রয়োজনীয় স্কোপের ক্ষুদ্রতম সেটের জন্য অনুরোধ করতে requestPermissions ফাংশন ব্যবহার করতে পারেন এবং দানাদার অনুমতির অনুরোধ করার সময় ব্যবহারকারী কোন স্কোপ মঞ্জুর করেছেন তা পরীক্ষা করতে hasPermissions ফাংশন ব্যবহার করতে পারেন।

ক্রোম এক্সটেনশন অ্যাপ্লিকেশন

সেরা অনুশীলনের উপর ভিত্তি করে Google OAuth 2.0 এর সাথে কাজ করতে আপনার Chrome Identity API ব্যবহার করা উচিত।

নীচের উদাহরণটি দেখায় কিভাবে সঠিকভাবে দানাদার অনুমতিগুলি পরিচালনা করতে হয়।

manifest.json

উদাহরণ ম্যানিফেস্ট ফাইলটি Chrome এক্সটেনশন অ্যাপ্লিকেশনের জন্য দুটি অ-সাইন-ইন স্কোপ ঘোষণা করে৷

{
  "name": "Example Chrome extension application",
  ...
  "permissions": [
      "identity"
    ],
  "oauth2" : {
      "client_id": "YOUR_CLIENT_ID",
      "scopes":["https://www.googleapis.com/auth/calendar.readonly",
                "https://www.googleapis.com/auth/contacts.readonly"]
  }
}

ভুল পদ্ধতি

সব বা কিছুই না

ব্যবহারকারীরা অনুমোদন প্রক্রিয়া শুরু করতে বোতামে ক্লিক করেন। কোড স্নিপেট অনুমান করে যে ব্যবহারকারীদের manifest.json ফাইলে উল্লেখ করা দুটি স্কোপের জন্য একটি "সব-অথবা-কিছু নয়" সম্মতি স্ক্রীন দেওয়া হয়েছে। এটি ব্যবহারকারীদের মঞ্জুর করা সুযোগগুলি পরীক্ষা করতে অবহেলা করে৷

oauth.js

...
document.querySelector('button').addEventListener('click', function () {
  chrome.identity.getAuthToken({ interactive: true },
      function (token) {
          if (token === undefined) {
            // User didn't authorize both scopes.
            // Updating the UX and application accordingly
            ...
          } else {
            // User authorized both or one of the scopes.
            // It neglects to check which scopes users granted and assumes users granted all scopes.

            // Calling the APIs, etc.
            ...
          }
      });
});

সঠিক দৃষ্টিভঙ্গি

ক্ষুদ্রতম স্কোপ

প্রয়োজনীয় স্কোপের ক্ষুদ্রতম সেট নির্বাচন করুন

অ্যাপ্লিকেশন শুধুমাত্র প্রয়োজন স্কোপের ক্ষুদ্রতম সেট অনুরোধ করা উচিত. এটি সুপারিশ করা হয় যে আপনার অ্যাপ্লিকেশনটি একটি সময়ে একটি সুযোগের অনুরোধ করবে যখন এটি একটি কাজ সম্পূর্ণ করার জন্য প্রয়োজন হয়।

এই উদাহরণে, মনে করা হয় যে manifest.json ফাইলে ঘোষিত উভয় স্কোপই প্রয়োজনীয় স্কোপের ক্ষুদ্রতম সেট। Google-এর সাথে অনুমোদন প্রক্রিয়া শুরু করতে oauth.js ফাইলটি Chrome Identity API ব্যবহার করে। আপনার দানাদার অনুমতিগুলি সক্ষম করার জন্য নির্বাচন করা উচিত, যাতে ব্যবহারকারীদের আপনার অ্যাপ্লিকেশনে অনুমতি দেওয়ার ক্ষেত্রে আরও বেশি নিয়ন্ত্রণ থাকে৷ ব্যবহারকারীরা কোন স্কোপ অনুমোদন করে তা যাচাই করে আপনার অ্যাপ্লিকেশনটি ব্যবহারকারীদের কাছ থেকে প্রতিক্রিয়া সঠিকভাবে পরিচালনা করা উচিত।

oauth.js

...
document.querySelector('button').addEventListener('click', function () {
  chrome.identity.getAuthToken({ interactive: true, enableGranularPermissions: true },
      function (token, grantedScopes) {
          if (token === undefined) {
            // User didn't authorize any scope.
            // Updating the UX and application accordingly
            ...
          } else {
            // User authorized the request. Now, check which scopes were granted.
            if (grantedScopes.includes('https://www.googleapis.com/auth/calendar.readonly'))
            {
              // User authorized Calendar read permission.
              // Calling the APIs, etc.
              ...
            }
            else
            {
              // User didn't authorize Calendar read permission.
              // Update UX and application accordingly
              ...
            }

            if (grantedScopes.includes('https://www.googleapis.com/auth/contacts.readonly'))
            {
              // User authorized Contacts read permission.
              // Calling the APIs, etc.
              ...
            }
            else
            {
              // User didn't authorize Contacts read permission.
              // Update UX and application accordingly
              ...
            }
          }
      });
});

iOS, iPadOS, এবং macOS অ্যাপ্লিকেশন

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

আপনি যদি Google OAuth 2.0-এর সাথে ইন্টারঅ্যাক্ট করার জন্য iOS এবং macOS লাইব্রেরির জন্য Google সাইন-ইন ব্যবহার করেন, তাহলে আপনার দানাদার অনুমতিগুলি পরিচালনার ডকুমেন্টেশন পর্যালোচনা করা উচিত।

ওয়েব অ্যাপ্লিকেশন

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

সার্ভার-সাইড (অফলাইন) অ্যাক্সেস

সার্ভার-সাইড (অফলাইন) অ্যাক্সেস মোডের জন্য আপনাকে নিম্নলিখিতগুলি করতে হবে:
  • একটি সার্ভার দাঁড় করান এবং অনুমোদন কোড পাওয়ার জন্য একটি সর্বজনীনভাবে অ্যাক্সেসযোগ্য এন্ডপয়েন্ট নির্ধারণ করুন।
  • আপনার পাবলিক এন্ডপয়েন্ট এর রিডাইরেক্ট URI কনফিগার করুন Credentials page Google ক্লাউড কনসোলের।

নিম্নলিখিত কোড স্নিপেটটি একটি NodeJS উদাহরণ দেখায় যা দুটি অ-সাইন-ইন স্কোপের অনুরোধ করে। ব্যবহারকারীরা দানাদার অনুমতি সম্মতি স্ক্রীন দেখতে পাবেন।

ভুল পদ্ধতি

সব বা কিছুই না

ব্যবহারকারীদের অনুমোদন URL এ পুনঃনির্দেশিত করা হয়. কোড স্নিপেট অনুমান করে যে ব্যবহারকারীদের scopes অ্যারেরিতে নির্দিষ্ট করা দুটি স্কোপের জন্য একটি "সব-অথবা-কিছুই না" সম্মতি স্ক্রীন দেওয়া হয়েছে। এটি ব্যবহারকারীদের মঞ্জুর করা সুযোগগুলি পরীক্ষা করতে অবহেলা করে৷

main.js

...
const oauth2Client = new google.auth.OAuth2(
  YOUR_CLIENT_ID,
  YOUR_CLIENT_SECRET,
  YOUR_REDIRECT_URL
);

// Access scopes for two non-Sign-In scopes - Google Calendar and Contacts
const scopes = [
  'https://www.googleapis.com/auth/contacts.readonly',
  'https://www.googleapis.com/auth/calendar.readonly'
];

// Generate a url that asks permissions for the Google Calendar and Contacts scopes
const authorizationUrl = oauth2Client.generateAuthUrl({
  // 'online' (default) or 'offline' (gets refresh_token)
  access_type: 'offline',
  // Pass in the scopes array defined above
  scope: scopes,
  // Enable incremental authorization. Recommended as best practices.
  include_granted_scopes: true
});

async function main() {
  const server = http.createServer(async function (req, res) {
    // Example on redirecting user to Google OAuth 2.0 server.
    if (req.url == '/') {
      res.writeHead(301, { "Location": authorizationUrl });
    }
    // Receive the callback from Google OAuth 2.0 server.
    if (req.url.startsWith('/oauth2callback')) {
      // Handle the Google OAuth 2.0 server response
      let q = url.parse(req.url, true).query;

      if (q.error) {
        // User didn't authorize both scopes.
        // Updating the UX and application accordingly
        ...
      } else {
        // User authorized both or one of the scopes.
        // It neglects to check which scopes users granted and assumes users granted all scopes.

        // Get access and refresh tokens (if access_type is offline)
        let { tokens } = await oauth2Client.getToken(q.code);
        // Calling the APIs, etc.
        ...
      }
    }
    res.end();
  }).listen(80);
}
সঠিক দৃষ্টিভঙ্গি

ক্ষুদ্রতম সুযোগ

প্রয়োজনীয় স্কোপের ক্ষুদ্রতম সেট নির্বাচন করুন

অ্যাপ্লিকেশন শুধুমাত্র প্রয়োজন স্কোপের ক্ষুদ্রতম সেট অনুরোধ করা উচিত. এটি সুপারিশ করা হয় যে আপনার অ্যাপ্লিকেশনটি একটি সময়ে একটি সুযোগের অনুরোধ করবে যখন এটি একটি কাজ সম্পূর্ণ করার জন্য প্রয়োজন হয়। যখনই আপনার অ্যাপ্লিকেশন স্কোপের অনুরোধ করে, তখন একাধিক অ্যাক্সেস টোকেন পরিচালনা করা এড়াতে এটিকে ক্রমবর্ধমান অনুমোদন ব্যবহার করা উচিত।

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

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

main.js

...
const oauth2Client = new google.auth.OAuth2(
  YOUR_CLIENT_ID,
  YOUR_CLIENT_SECRET,
  YOUR_REDIRECT_URL
);

// Access scopes for two non-Sign-In scopes - Google Calendar and Contacts
const scopes = [
  'https://www.googleapis.com/auth/contacts.readonly',
  'https://www.googleapis.com/auth/calendar.readonly'
];

// Generate a url that asks permissions for the Google Calendar and Contacts scopes
const authorizationUrl = oauth2Client.generateAuthUrl({
  // 'online' (default) or 'offline' (gets refresh_token)
  access_type: 'offline',
  // Pass in the scopes array defined above
  scope: scopes,
  // Enable incremental authorization. Recommended as best practices.
  include_granted_scopes: true,
  // Set to true to enable more granular permissions for Google OAuth 2.0 client IDs created before 2019.
  // No effect for newer Google OAuth 2.0 client IDs, since more granular permissions is always enabled for them.
  enable_granular_consent: true
});

async function main() {
  const server = http.createServer(async function (req, res) {
    // Redirect users to Google OAuth 2.0 server.
    if (req.url == '/') {
      res.writeHead(301, { "Location": authorizationUrl });
    }
    // Receive the callback from Google OAuth 2.0 server.
    if (req.url.startsWith('/oauth2callback')) {
      // Handle the Google OAuth 2.0 server response
      let q = url.parse(req.url, true).query;

      if (q.error) {
        // User didn't authorize both scopes.
        // Updating the UX and application accordingly
        ...
      } else {
        // Get access and refresh tokens (if access_type is offline)
        let { tokens } = await oauth2Client.getToken(q.code);
        oauth2Client.setCredentials(tokens);

        // User authorized the request. Now, check which scopes were granted.
        if (tokens.scope.includes('https://www.googleapis.com/auth/calendar.readonly'))
        {
          // User authorized Calendar read permission.
          // Calling the APIs, etc.
          ...
        }
        else
        {
          // User didn't authorize Calendar read permission.
          // Calling the APIs, etc.
          ...
        }

        // Check which scopes user granted the permission to application
        if (tokens.scope.includes('https://www.googleapis.com/auth/contacts.readonly'))
        {
          // User authorized Contacts read permission.
          // Calling the APIs, etc.
          ...
        }
        else
        {
          // User didn't authorize Contacts read permission.
          // Update UX and application accordingly
          ...
        }
      }
    }
    res.end();
  }).listen(80);
}

সার্ভার-ভিত্তিক অ্যাপ্লিকেশানগুলি থেকে কীভাবে Google APIগুলি অ্যাক্সেস করতে হয় সে সম্পর্কে সার্ভার-সাইড ওয়েব অ্যাপ গাইডটি পর্যালোচনা করুন৷

ক্লায়েন্ট-সাইড শুধুমাত্র অ্যাক্সেস

  • Google OAuth 2.0-এর সাথে ইন্টারঅ্যাক্ট করতে Google Identity Services JavaScript লাইব্রেরি ব্যবহার করে এমন অ্যাপ্লিকেশানগুলির জন্য, দানাদার অনুমতিগুলি পরিচালনা করার জন্য আপনার এই ডকুমেন্টেশন পর্যালোচনা করা উচিত।
  • যে অ্যাপ্লিকেশানগুলি সরাসরি জাভাস্ক্রিপ্ট ব্যবহার করে Google OAuth 2.0 অনুমোদনের শেষ পয়েন্টে কল করে, তাদের জন্য দানাদার অনুমতিগুলি পরিচালনা করার জন্য আপনার এই ডকুমেন্টেশন পর্যালোচনা করা উচিত।

দানাদার অনুমতি পরিচালনা করার জন্য আপনার আপডেট করা আবেদন পরীক্ষা করুন

  1. ব্যবহারকারীরা অনুমতির অনুরোধ এবং আপনার অ্যাপ্লিকেশন থেকে প্রত্যাশিত আচরণের প্রতিক্রিয়া জানাতে পারে এমন সমস্ত ক্ষেত্রে রূপরেখা দিন । উদাহরণস্বরূপ, যদি ব্যবহারকারী তিনটি অনুরোধকৃত স্কোপের মধ্যে শুধুমাত্র দুটি অনুমোদন করে, আপনার আবেদন সেই অনুযায়ী আচরণ করা উচিত।
  2. দানাদার অনুমতি সক্ষম করে আপনার আবেদন পরীক্ষা করুন । দানাদার অনুমতি সক্ষম করার দুটি উপায় রয়েছে:
    1. আপনার অ্যাপ্লিকেশনের জন্য দানাদার অনুমতিগুলি ইতিমধ্যে সক্ষম করা আছে কিনা তা দেখতে আপনার আবেদনের OAuth 2.0 সম্মতি স্ক্রীনগুলি পরীক্ষা করুন৷ আপনি পরীক্ষার উদ্দেশ্যে Google ক্লাউড কনসোলের মাধ্যমে একটি নতুন ওয়েব, Android বা iOS Google OAuth 2.0 ক্লায়েন্ট আইডি তৈরি করতে পারেন কারণ তাদের জন্য দানাদার অনুমতি সর্বদা সক্ষম থাকে৷
    2. Google OAuth অনুমোদনের এন্ডপয়েন্টে কল করার সময় enable_granular_consent প্যারামিটারটিকে true সেট করুন। কিছু SDK-এর এই প্যারামিটারের জন্য স্পষ্ট সমর্থন রয়েছে। অন্যদের জন্য, আপনি কীভাবে এই প্যারামিটার এবং এর মান ম্যানুয়ালি যোগ করতে পারেন তা দেখতে ডকুমেন্টেশন পরীক্ষা করুন। যদি আপনার বাস্তবায়ন প্যারামিটার যোগ করাকে সমর্থন না করে, তাহলে আপনি শুধুমাত্র পূর্ববর্তী পয়েন্টে বলা হয়েছে পরীক্ষার উদ্দেশ্যে Google ক্লাউড কনসোলের মাধ্যমে একটি নতুন ওয়েব, Android, বা iOS Google OAuth 2.0 ক্লায়েন্ট আইডি তৈরি করতে পারেন।
  3. আপনার আপডেট করা অ্যাপ্লিকেশন পরীক্ষা করার সময়, ওয়ার্কস্পেস অ্যাকাউন্টের পরিবর্তে একটি ব্যক্তিগত Google অ্যাকাউন্ট (@gmail.com) ব্যবহার করুন। এর কারণ হল ওয়ার্কস্পেস এন্টারপ্রাইজ অ্যাপ ডোমেইন-ওয়াইড অথরিটির প্রতিনিধিত্ব সহ বা বিশ্বস্ত হিসাবে চিহ্নিত করা এই সময়ে দানাদার অনুমতিগুলির পরিবর্তন দ্বারা প্রভাবিত হয় না। তাই, আপনার প্রতিষ্ঠানের একটি ওয়ার্কস্পেস অ্যাকাউন্টের মাধ্যমে পরীক্ষা করলে নতুন দানাদার সম্মতি স্ক্রিনটি যেমনটি দেখাবে তেমন নাও হতে পারে।