সার্ভার থেকে সার্ভার অ্যাপ্লিকেশনের জন্য OAuth 2.0 ব্যবহার করা

Google OAuth 2.0 সিস্টেম সার্ভার-টু-সার্ভার ইন্টারঅ্যাকশন সমর্থন করে, যেমন একটি ওয়েব অ্যাপ্লিকেশন এবং একটি Google পরিষেবার মধ্যে। এই পরিস্থিতিতে আপনার একটি পরিষেবা অ্যাকাউন্ট প্রয়োজন, যা একটি অ্যাকাউন্ট যা কোনও পৃথক ব্যবহারকারীর পরিবর্তে আপনার অ্যাপ্লিকেশনের অন্তর্গত। আপনার অ্যাপ্লিকেশন পরিষেবা অ্যাকাউন্টের পক্ষে Google API গুলিকে কল করে, তাই ব্যবহারকারীরা সরাসরি জড়িত থাকে না। এই পরিস্থিতিটিকে কখনও কখনও "two-legged OAuth," বা "2LO" বলা হয়। (সম্পর্কিত শব্দ "three-legged OAuth" বলতে এমন পরিস্থিতি বোঝায় যেখানে আপনার অ্যাপ্লিকেশন শেষ ব্যবহারকারীদের পক্ষে Google API গুলিকে কল করে এবং যেখানে কখনও কখনও ব্যবহারকারীর সম্মতি প্রয়োজন হয়।)

আরও তথ্যের জন্য পরিষেবা অ্যাকাউন্টের জন্য সেরা অনুশীলনগুলি দেখুন।

সাধারণত, যখন কোনও অ্যাপ্লিকেশন ব্যবহারকারীর ডেটার পরিবর্তে নিজস্ব ডেটা নিয়ে কাজ করার জন্য Google API ব্যবহার করে তখন একটি পরিষেবা অ্যাকাউন্ট ব্যবহার করে। উদাহরণস্বরূপ, যে অ্যাপ্লিকেশন ডেটা স্থায়ীত্বের জন্য Google Cloud Datastore ব্যবহার করে, সে Google Cloud Datastore API-তে তার কলগুলি প্রমাণীকরণের জন্য একটি পরিষেবা অ্যাকাউন্ট ব্যবহার করবে।

Google Workspace ডোমেন অ্যাডমিনিস্ট্রেটররা ডোমেন-ব্যাপী পরিষেবা অ্যাকাউন্টগুলিকে ডোমেনের ব্যবহারকারীদের পক্ষে ব্যবহারকারীর ডেটা অ্যাক্সেস করার অধিকারও দিতে পারেন।

এই ডকুমেন্টে বর্ণনা করা হয়েছে যে কীভাবে একটি অ্যাপ্লিকেশন Google APIs ক্লায়েন্ট লাইব্রেরি (প্রস্তাবিত) অথবা HTTP ব্যবহার করে সার্ভার-টু-সার্ভার OAuth 2.0 প্রবাহ সম্পূর্ণ করতে পারে।

সংক্ষিপ্ত বিবরণ

সার্ভার-টু-সার্ভার ইন্টারঅ্যাকশন সমর্থন করার জন্য, প্রথমে আপনার প্রকল্পের জন্য একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন API Console. যদি আপনি আপনার Google Workspace অ্যাকাউন্টের ব্যবহারকারীদের ডেটা অ্যাক্সেস করতে চান, তাহলে পরিষেবা অ্যাকাউন্টে ডোমেন-ব্যাপী অ্যাক্সেস অর্পণ করুন।

তারপর, আপনার অ্যাপ্লিকেশনটি OAuth 2.0 auth সার্ভার থেকে একটি অ্যাক্সেস টোকেনের অনুরোধ করার জন্য পরিষেবা অ্যাকাউন্টের শংসাপত্র ব্যবহার করে অনুমোদিত API কল করার জন্য প্রস্তুত হয়।

অবশেষে, আপনার অ্যাপ্লিকেশনটি Google API গুলিতে কল করার জন্য অ্যাক্সেস টোকেন ব্যবহার করতে পারে।

একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন

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

যদি আপনার অ্যাপ্লিকেশনটি Google App Engine-এ চলে, তাহলে আপনার প্রকল্প তৈরি করার সময় একটি পরিষেবা অ্যাকাউন্ট স্বয়ংক্রিয়ভাবে সেট আপ হয়ে যাবে।

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

যদি আপনার অ্যাপ্লিকেশনটি Google App Engine বা Google Compute Engine-এ না চলে, তাহলে আপনাকে অবশ্যই এই শংসাপত্রগুলি পেতে হবে Google API Console. সার্ভিস-অ্যাকাউন্ট ক্রেডেনশিয়াল তৈরি করতে, অথবা আপনার ইতিমধ্যে তৈরি করা পাবলিক ক্রেডেনশিয়ালগুলি দেখতে, নিম্নলিখিতগুলি করুন:

প্রথমে, একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন:

  1. খুলুন Service accounts page.
  2. If prompted, select a project, or create a new one.
  3. পরিষেবা অ্যাকাউন্ট তৈরি করুন এ ক্লিক করুন।
  4. পরিষেবা অ্যাকাউন্টের বিবরণের অধীনে, পরিষেবা অ্যাকাউন্টের জন্য একটি নাম, আইডি এবং বিবরণ টাইপ করুন, তারপর তৈরি করুন এবং চালিয়ে যান ক্লিক করুন।
  5. ঐচ্ছিক: "Grant this service account access to project" এর অধীনে, পরিষেবা অ্যাকাউন্টে মঞ্জুর করার জন্য IAM ভূমিকাগুলি নির্বাচন করুন।
  6. চালিয়ে যান ক্লিক করুন।
  7. ঐচ্ছিক: "ব্যবহারকারীদের এই পরিষেবা অ্যাকাউন্টে অ্যাক্সেস প্রদান করুন" এর অধীনে, পরিষেবা অ্যাকাউন্ট ব্যবহার এবং পরিচালনা করার জন্য অনুমোদিত ব্যবহারকারী বা গোষ্ঠীগুলিকে যুক্ত করুন।
  8. সম্পন্ন ক্লিক করুন।

এরপর, একটি পরিষেবা অ্যাকাউন্ট কী তৈরি করুন:

  1. আপনার তৈরি করা পরিষেবা অ্যাকাউন্টের ইমেল ঠিকানায় ক্লিক করুন।
  2. কী ট্যাবে ক্লিক করুন।
  3. Add key ড্রপ-ডাউন তালিকায়, Create new key নির্বাচন করুন।
  4. তৈরি করুন ক্লিক করুন।

আরও জানতে, পরিষেবা অ্যাকাউন্ট কী পরিচালনার জন্য সেরা অনুশীলনগুলি দেখুন।

তুমি ফিরে যেতে পারো API Console যেকোনো সময় ইমেল ঠিকানা, পাবলিক কী ফিঙ্গারপ্রিন্ট এবং অন্যান্য তথ্য দেখতে, অথবা অতিরিক্ত পাবলিক/প্রাইভেট কী জোড়া তৈরি করতে। পরিষেবা অ্যাকাউন্টের শংসাপত্র সম্পর্কে আরও বিস্তারিত জানার জন্য API Console, পরিষেবা অ্যাকাউন্টগুলি দেখুন API Consoleসাহায্য ফাইল।

পরিষেবা অ্যাকাউন্টের ইমেল ঠিকানাটি নোট করুন এবং পরিষেবা অ্যাকাউন্টের ব্যক্তিগত কী ফাইলটি আপনার অ্যাপ্লিকেশনের জন্য অ্যাক্সেসযোগ্য স্থানে সংরক্ষণ করুন। অনুমোদিত API কল করার জন্য আপনার অ্যাপ্লিকেশনের এগুলি প্রয়োজন।

পরিষেবা অ্যাকাউন্টে ডোমেন-ওয়াইড কর্তৃত্ব অর্পণ করুন

একটি Google Workspace অ্যাকাউন্ট ব্যবহার করে, প্রতিষ্ঠানের একজন Workspace প্রশাসক Google Workspace ডোমেনের ব্যবহারকারীদের পক্ষে Workspace ব্যবহারকারীর ডেটা অ্যাক্সেস করার জন্য একটি অ্যাপ্লিকেশনকে অনুমোদন করতে পারেন। উদাহরণস্বরূপ, একটি অ্যাপ্লিকেশন যা Google Workspace ডোমেনের সমস্ত ব্যবহারকারীর ক্যালেন্ডারে ইভেন্ট যোগ করার জন্য Google Calendar API ব্যবহার করে, ব্যবহারকারীদের পক্ষে Google Calendar API অ্যাক্সেস করার জন্য একটি পরিষেবা অ্যাকাউন্ট ব্যবহার করবে। একটি ডোমেনের ব্যবহারকারীদের পক্ষে ডেটা অ্যাক্সেস করার জন্য একটি পরিষেবা অ্যাকাউন্টকে অনুমোদন করাকে কখনও কখনও একটি পরিষেবা অ্যাকাউন্টে "ডোমেন-ওয়াইড কর্তৃপক্ষ অর্পণ" বলা হয়।

কোনও পরিষেবা অ্যাকাউন্টে ডোমেন-ওয়াইড কর্তৃত্ব অর্পণ করতে, Google Workspace ডোমেনের একজন সুপার অ্যাডমিনিস্ট্রেটরকে নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করতে হবে:

  1. আপনার Google Workspace ডোমেনের অ্যাডমিন কনসোল থেকে, প্রধান মেনু > নিরাপত্তা > অ্যাক্সেস এবং ডেটা নিয়ন্ত্রণ > API নিয়ন্ত্রণগুলিতে যান।
  2. ডোমেন ওয়াইড ডেলিগেশন প্যানে, ডোমেন ওয়াইড ডেলিগেশন পরিচালনা করুন নির্বাচন করুন।
  3. নতুন যোগ করুন ক্লিক করুন।
  4. ক্লায়েন্ট আইডি ক্ষেত্রে, পরিষেবা অ্যাকাউন্টের ক্লায়েন্ট আইডি লিখুন। আপনি আপনার পরিষেবা অ্যাকাউন্টের ক্লায়েন্ট আইডি খুঁজে পেতে পারেন Service accounts page.
  5. OAuth স্কোপ (কমা-সীমাবদ্ধ) ক্ষেত্রে, আপনার অ্যাপ্লিকেশনকে যে স্কোপগুলিতে অ্যাক্সেস দেওয়া উচিত তার তালিকা লিখুন। উদাহরণস্বরূপ, যদি আপনার অ্যাপ্লিকেশনটির Google ড্রাইভ API এবং Google ক্যালেন্ডার API-তে ডোমেন-ব্যাপী সম্পূর্ণ অ্যাক্সেসের প্রয়োজন হয়, তাহলে লিখুন: https://www.googleapis.com/auth/drive, https://www.googleapis.com/auth/calendar
  6. অনুমোদন করুন ক্লিক করুন।

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

একটি ডেলিগেটেড API কল করুন

নিম্নলিখিত বিভাগগুলিতে Google APIs ক্লায়েন্ট লাইব্রেরি ব্যবহার করে অথবা HTTP ব্যবহার করে OAuth 2.0 সিস্টেমের সাথে সরাসরি ইন্টারঅ্যাক্ট করে কীভাবে একটি অনুমোদিত API কল করতে হয় তা দেখানো হয়েছে।

জাভা

ক্লায়েন্টের ইমেল ঠিকানা এবং ব্যক্তিগত কী পাওয়ার পর API Console, জাভার জন্য Google Auth Library ব্যবহার করে পরিষেবা অ্যাকাউন্টের শংসাপত্র এবং আপনার অ্যাপ্লিকেশনের অ্যাক্সেসের প্রয়োজন এমন স্কোপ থেকে একটি GoogleCredentials অবজেক্ট তৈরি করুন। উদাহরণস্বরূপ:

import com.google.auth.oauth2.GoogleCredentials;
import com.google.api.services.sqladmin.SQLAdminScopes;

// ...

GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream("ServiceAccountKey.json"))
    .createScoped(Collections.singleton(SQLAdminScopes.SQLSERVICE_ADMIN));

আপনি যদি গুগল ক্লাউডে একটি অ্যাপ তৈরি করেন, তাহলে আপনি অ্যাপ্লিকেশনের ডিফল্ট শংসাপত্র ব্যবহার করতে পারেন, যা প্রক্রিয়াটিকে সহজতর করতে পারে।

ডোমেন-ওয়াইড কর্তৃপক্ষকে অর্পণ করুন

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

GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream("ServiceAccountKey.json"))
    .createScoped(Collections.singleton(SQLAdminScopes.SQLSERVICE_ADMIN))
    .createDelegated("workspace-user@example.com");

createDelegated() পদ্ধতিতে কল করার জন্য GoogleCredentials অবজেক্ট ব্যবহার করা হয়। createDelegated() পদ্ধতির আর্গুমেন্টটি অবশ্যই আপনার Workspace অ্যাকাউন্টের অন্তর্গত একজন ব্যবহারকারী হতে হবে। আপনার অনুরোধ করা কোডটি আপনার পরিষেবা অ্যাকাউন্ট ব্যবহার করে Google API গুলিকে কল করার জন্য এই শংসাপত্র ব্যবহার করবে।

পাইথন

ক্লায়েন্টের ইমেল ঠিকানা এবং ব্যক্তিগত কী পাওয়ার পর API Console, নিম্নলিখিত ধাপগুলি সম্পন্ন করতে পাইথনের জন্য Google APIs ক্লায়েন্ট লাইব্রেরি ব্যবহার করুন:

  1. পরিষেবা অ্যাকাউন্টের শংসাপত্র এবং আপনার অ্যাপ্লিকেশনের যে স্কোপগুলিতে অ্যাক্সেস প্রয়োজন তা থেকে একটি Credentials অবজেক্ট তৈরি করুন। উদাহরণস্বরূপ:
    from google.oauth2 import service_account
    
    SCOPES = ['https://www.googleapis.com/auth/sqlservice.admin']
    SERVICE_ACCOUNT_FILE = '/path/to/ServiceAccountKey.json'
    
    credentials = service_account.Credentials.from_service_account_file(
            SERVICE_ACCOUNT_FILE, scopes=SCOPES)

    আপনি যদি গুগল ক্লাউডে একটি অ্যাপ তৈরি করেন, তাহলে আপনি অ্যাপ্লিকেশনের ডিফল্ট শংসাপত্র ব্যবহার করতে পারেন, যা প্রক্রিয়াটিকে সহজতর করতে পারে।

  2. ডোমেন-ওয়াইড কর্তৃপক্ষকে অর্পণ করুন

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

    delegated_credentials = credentials.with_subject('user@example.org')

আপনার অ্যাপ্লিকেশনে Google API গুলিকে কল করতে Credentials অবজেক্ট ব্যবহার করুন।

HTTP/বিশ্রাম

ক্লায়েন্ট আইডি এবং প্রাইভেট কী পাওয়ার পর API Console, আপনার আবেদনপত্রের জন্য নিম্নলিখিত ধাপগুলি সম্পন্ন করতে হবে:

  1. একটি JSON ওয়েব টোকেন (JWT, উচ্চারণ, "jot") তৈরি করুন যাতে একটি হেডার, একটি দাবি সেট এবং একটি স্বাক্ষর অন্তর্ভুক্ত থাকে।
  2. Google OAuth 2.0 অনুমোদন সার্ভার থেকে একটি অ্যাক্সেস টোকেনের অনুরোধ করুন।
  3. অনুমোদন সার্ভার যে JSON প্রতিক্রিয়া প্রদান করে তা পরিচালনা করুন।

পরবর্তী বিভাগগুলিতে এই পদক্ষেপগুলি কীভাবে সম্পন্ন করতে হবে তা বর্ণনা করা হয়েছে।

যদি প্রতিক্রিয়াটিতে একটি অ্যাক্সেস টোকেন থাকে, তাহলে আপনি একটি Google API কল করার জন্য অ্যাক্সেস টোকেন ব্যবহার করতে পারেন। (যদি প্রতিক্রিয়াটিতে একটি অ্যাক্সেস টোকেন অন্তর্ভুক্ত না থাকে, তাহলে আপনার JWT এবং টোকেন অনুরোধ সঠিকভাবে তৈরি নাও হতে পারে, অথবা পরিষেবা অ্যাকাউন্টের অনুরোধকৃত স্কোপগুলি অ্যাক্সেস করার অনুমতি নাও থাকতে পারে।)

যখন অ্যাক্সেস টোকেনের মেয়াদ শেষ হয়ে যায় , তখন আপনার অ্যাপ্লিকেশনটি আরেকটি JWT তৈরি করে, তাতে স্বাক্ষর করে এবং আরেকটি অ্যাক্সেস টোকেনের অনুরোধ করে।

আপনার সার্ভার অ্যাপ্লিকেশনটি Google অথরাইজেশন সার্ভার থেকে একটি টোকেন অনুরোধ করার জন্য একটি JWT ব্যবহার করে, তারপর একটি Google API এন্ডপয়েন্ট কল করার জন্য টোকেনটি ব্যবহার করে। কোনও এন্ড ইউজার জড়িত নয়।
চিত্র ১. আপনার সার্ভার অ্যাপ্লিকেশনটি Google Authorization Server থেকে একটি টোকেন অনুরোধ করার জন্য একটি JWT ব্যবহার করে, তারপর একটি Google API এন্ডপয়েন্ট কল করার জন্য টোকেনটি ব্যবহার করে। কোনও এন্ড ইউজার জড়িত নয়।

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

একটি JWT তৈরি করুন

একটি JWT তিনটি অংশ নিয়ে গঠিত: একটি হেডার, একটি ক্লেইম সেট এবং একটি সিগনেচার। হেডার এবং ক্লেইম সেট হল JSON অবজেক্ট। এই JSON অবজেক্টগুলিকে UTF-8 বাইটে সিরিয়ালাইজ করা হয়, তারপর Base64url এনকোডিং ব্যবহার করে এনকোড করা হয়। এই এনকোডিং বারবার এনকোডিং অপারেশনের কারণে এনকোডিং পরিবর্তনের বিরুদ্ধে স্থিতিস্থাপকতা প্রদান করে। হেডার, ক্লেইম সেট এবং সিগনেচার একটি পিরিয়ড ( . ) অক্ষরের সাথে একসাথে সংযুক্ত করা হয়।

একটি JWT নিম্নরূপে গঠিত হয়:

{Base64url encoded header}.{Base64url encoded claim set}.{Base64url encoded signature}

স্বাক্ষরের বেস স্ট্রিংটি নিম্নরূপ:

{Base64url encoded header}.{Base64url encoded claim set}
JWT হেডার তৈরি করুন

হেডারটিতে দুটি প্রয়োজনীয় ক্ষেত্র রয়েছে: স্বাক্ষরকারী অ্যালগরিদম এবং দাবির বিন্যাস, এবং একটি ঐচ্ছিক কী আইডি:

  • অ্যালগরিদম বাধ্যতামূলক, এবং এর শুধুমাত্র একটি মান আছে: "alg": "RS256"
  • বিন্যাস বাধ্যতামূলক, এবং এর শুধুমাত্র একটি মান আছে: "typ": "JWT" ​​।
  • কী আইডি ঐচ্ছিক, এবং এটি JWT সাইন করার জন্য ব্যবহৃত পরিষেবা অ্যাকাউন্ট কী-এর আইডি । যদি একটি ভুল কী আইডি নির্দিষ্ট করা থাকে, তাহলে পরিষেবা অ্যাকাউন্টের সাথে সম্পর্কিত সমস্ত কী চেষ্টা করা হয়। যদি কোনও বৈধ কী পাওয়া না যায়, তাহলে টোকেনটি প্রত্যাখ্যান করা হয়। ভুল কী আইডি সহ টোকেনগুলি প্রত্যাখ্যান করার অধিকার Google সংরক্ষণ করে।

পরিষেবা অ্যাকাউন্টগুলি RSA SHA-256 অ্যালগরিদম এবং JWT টোকেন ফর্ম্যাটের উপর নির্ভর করে। ফলস্বরূপ, হেডারের JSON উপস্থাপনা নিম্নরূপ:

{"alg":"RS256","typ":"JWT", "kid":"370ab79b4513eb9bad7c9bd16a95cb76b5b2a56a"}

এর Base64url উপস্থাপনা নিম্নরূপ:

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsICJraWQiOiIzNzBhYjc5YjQ1MTNlYjliYWQ3YzliZDE2YTk1Y2I3NmI1YjJhNTZhIn0=
JWT দাবি সেট তৈরি করুন

JWT দাবি সেটে JWT সম্পর্কে তথ্য থাকে, যার মধ্যে রয়েছে অনুরোধ করা অনুমতি (স্কোপ), টোকেনের লক্ষ্য, ইস্যুকারী, টোকেনটি ইস্যু করার সময় এবং টোকেনের জীবনকাল। বেশিরভাগ ক্ষেত্র বাধ্যতামূলক। JWT হেডারের মতো, JWT দাবি সেটটি একটি JSON অবজেক্ট এবং স্বাক্ষর গণনায় ব্যবহৃত হয়।

প্রয়োজনীয় দাবি

JWT দাবি সেটে প্রয়োজনীয় দাবিগুলি দাবি সেটের যেকোনো ক্রমে প্রদর্শিত হতে পারে।

নাম বিবরণ
iss পরিষেবা অ্যাকাউন্টের ইমেল ঠিকানা।
scope অ্যাপ্লিকেশনটি যে অনুমতিগুলির জন্য অনুরোধ করে তার একটি স্থান-সীমাবদ্ধ তালিকা।
aud দাবির উদ্দেশ্যমূলক লক্ষ্যের বর্ণনাকারী। অ্যাক্সেস টোকেন অনুরোধ করার সময় এই মানটি সর্বদা https://oauth2.googleapis.com/token হয়।
exp দাবির মেয়াদ শেষ হওয়ার সময়, 00:00:00 UTC, 1 জানুয়ারী, 1970 থেকে সেকেন্ড হিসাবে নির্দিষ্ট করা হয়েছে। এই মানটি জারি করা সময়ের পরে সর্বাধিক 1 ঘন্টা হতে পারে।
iat দাবিটি জারি করার সময়, 00:00:00 UTC থেকে সেকেন্ড হিসাবে নির্দিষ্ট করা হয়েছে, 1 জানুয়ারী, 1970।

এটি একটি JWT দাবি সেটে প্রয়োজনীয় ক্ষেত্রগুলির JSON উপস্থাপনার একটি উদাহরণ:

{
  "iss": "761326798069-r5mljlln1rd4lrbhg75efgigp36m78j5@developer.gserviceaccount.com",
  "scope": "https://www.googleapis.com/auth/devstorage.read_only",
  "aud": "https://oauth2.googleapis.com/token",
  "exp": 1328554385,
  "iat": 1328550785
}
অতিরিক্ত দাবি

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

একটি অ্যাক্সেস টোকেন পেতে যা একটি অ্যাপ্লিকেশনকে একটি রিসোর্সে ডেলিগেট করা অ্যাক্সেস প্রদান করে, sub মান হিসাবে JWT দাবি সেটে ব্যবহারকারীর ইমেল ঠিকানা অন্তর্ভুক্ত করুন।

নাম বিবরণ
sub যে ব্যবহারকারীর জন্য অ্যাপ্লিকেশনটি ডেলিগেটেড অ্যাক্সেসের অনুরোধ করছে তার ইমেল ঠিকানা।

যদি কোনও অ্যাপ্লিকেশনের কোনও ব্যবহারকারীর ছদ্মবেশ ধারণ করার অনুমতি না থাকে, তাহলে sub সহ একটি অ্যাক্সেস টোকেন অনুরোধের প্রতিক্রিয়া একটি ত্রুটি হবে।

এটি একটি JWT দাবি সেটের উদাহরণ যাতে sub অন্তর্ভুক্ত রয়েছে:

{
  "iss": "761326798069-r5mljlln1rd4lrbhg75efgigp36m78j5@developer.gserviceaccount.com",
  "sub": "some.user@example.com",
  "scope": "https://www.googleapis.com/auth/prediction",
  "aud": "https://oauth2.googleapis.com/token",
  "exp": 1328554385,
  "iat": 1328550785
}
JWT দাবি সেট এনকোডিং করা হচ্ছে

JWT হেডারের মতো, JWT দাবি সেটটি UTF-8 এবং Base64url-safe এনকোডেড করে সিরিয়ালাইজ করা উচিত। এটি JWT দাবি সেটের JSON উপস্থাপনার একটি উদাহরণ:

{
  "iss": "761326798069-r5mljlln1rd4lrbhg75efgigp36m78j5@developer.gserviceaccount.com",
  "scope": "https://www.googleapis.com/auth/prediction",
  "aud": "https://oauth2.googleapis.com/token",
  "exp": 1328554385,
  "iat": 1328550785
}
স্বাক্ষর গণনা করুন

JSON ওয়েব সিগনেচার (JWS) হল সেই স্পেসিফিকেশন যা JWT-এর জন্য স্বাক্ষর তৈরির মেকানিক্সকে নির্দেশ করে। স্বাক্ষরের ইনপুট হল নিম্নলিখিত বিষয়বস্তুর বাইট অ্যারে:

{Base64url encoded header}.{Base64url encoded claim set}

স্বাক্ষর গণনা করার সময় JWT হেডারে থাকা সাইনিং অ্যালগরিদম ব্যবহার করতে হবে। Google OAuth 2.0 Authorization Server দ্বারা সমর্থিত একমাত্র সাইনিং অ্যালগরিদম হল SHA-256 হ্যাশিং অ্যালগরিদম ব্যবহার করে RSA। JWT হেডারে alg ক্ষেত্রে এটি RS256 হিসাবে প্রকাশ করা হয়েছে।

SHA256withRSA (SHA-256 হ্যাশ ফাংশন সহ RSASSA-PKCS1-V1_5-SIGN নামেও পরিচিত) ব্যবহার করে ইনপুটের UTF-8 উপস্থাপনা স্বাক্ষর করুন। Google API Console। আউটপুটটি একটি বাইট অ্যারে হবে।

স্বাক্ষরটি অবশ্যই Base64url এনকোডেড হতে হবে। হেডার, দাবি সেট এবং স্বাক্ষর একটি পিরিয়ড ( . ) অক্ষরের সাথে একসাথে সংযুক্ত করা হবে। ফলাফল হল JWT। এটি নিম্নলিখিত হওয়া উচিত (স্পষ্টতার জন্য লাইন ব্রেক যোগ করা হয়েছে):

{Base64url encoded header}.
{Base64url encoded claim set}.
{Base64url encoded signature}

এটি Base64url এনকোডিংয়ের আগে JWT-এর একটি উদাহরণ:

{"alg":"RS256","typ":"JWT"}.
{
"iss":"761326798069-r5mljlln1rd4lrbhg75efgigp36m78j5@developer.gserviceaccount.com",
"scope":"https://www.googleapis.com/auth/prediction",
"aud":"https://oauth2.googleapis.com/token",
"exp":1328554385,
"iat":1328550785
}.
[signature bytes]

এটি একটি JWT-এর উদাহরণ যা স্বাক্ষরিত হয়েছে এবং ট্রান্সমিশনের জন্য প্রস্তুত:

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI3NjEzMjY3OTgwNjktcjVtbGpsbG4xcmQ0bHJiaGc3NWVmZ2lncDM2bTc4ajVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLCJzY29wZSI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvcHJlZGljdGlvbiIsImF1ZCI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL29hdXRoMi92NC90b2tlbiIsImV4cCI6MTMyODU1NDM4NSwiaWF0IjoxMzI4NTUwNzg1fQ.UFUt59SUM2_AW4cRU8Y0BYVQsNTo4n7AFsNrqOpYiICDu37vVt-tw38UKzjmUKtcRsLLjrR3gFW3dNDMx_pL9DVjgVHDdYirtrCekUHOYoa1CMR66nxep5q5cBQ4y4u2kIgSvChCTc9pmLLNoIem-ruCecAJYgI9Ks7pTnW1gkOKs0x3YpiLpzplVHAkkHztaXiJdtpBcY1OXyo6jTQCa3Lk2Q3va1dPkh_d--GU2M5flgd8xNBPYw4vxyt0mP59XZlHMpztZt0soSgObf7G3GXArreF_6tpbFsS3z2t5zkEiHuWJXpzcYr5zWTRPDEHsejeBSG8EgpLDce2380ROQ

একটি অ্যাক্সেস টোকেনের অনুরোধ করুন

স্বাক্ষরিত JWT তৈরি করার পর, একটি অ্যাপ্লিকেশন এটি ব্যবহার করে একটি অ্যাক্সেস টোকেন অনুরোধ করতে পারে। এই অ্যাক্সেস টোকেন অনুরোধটি একটি HTTPS POST অনুরোধ, এবং মূল অংশটি URL এনকোড করা আছে। উদাহরণস্বরূপ:

https://oauth2.googleapis.com/token

HTTPS POST অনুরোধে নিম্নলিখিত প্যারামিটারগুলি প্রয়োজন:

নাম বিবরণ
grant_type প্রয়োজনে URL-এনকোডেড নিম্নলিখিত স্ট্রিংটি ব্যবহার করুন: urn:ietf:params:oauth:grant-type:jwt-bearer
assertion স্বাক্ষর সহ JWT।

এটি একটি অ্যাক্সেস টোকেন অনুরোধে ব্যবহৃত HTTPS POST অনুরোধের একটি কাঁচা ডাম্প:

POST /token HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI3NjEzMjY3OTgwNjktcjVtbGpsbG4xcmQ0bHJiaGc3NWVmZ2lncDM2bTc4ajVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLCJzY29wZSI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvcHJlZGljdGlvbiIsImF1ZCI6Imh0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbS9vL29hdXRoMi90b2tlbiIsImV4cCI6MTMyODU3MzM4MSwiaWF0IjoxMzI4NTY5NzgxfQ.ixOUGehweEVX_UKXv5BbbwVEdcz6AYS-6uQV6fGorGKrHf3LIJnyREw9evE-gs2bmMaQI5_UbabvI4k-mQE4kBqtmSpTzxYBL1TCd7Kv5nTZoUC1CmwmWCFqT9RE6D7XSgPUh_jF1qskLa2w0rxMSjwruNKbysgRNctZPln7cqQ

এটি একই অনুরোধ, curl ব্যবহার করে:

curl -d 'grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI3NjEzMjY3OTgwNjktcjVtbGpsbG4xcmQ0bHJiaGc3NWVmZ2lncDM2bTc4ajVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLCJzY29wZSI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvcHJlZGljdGlvbiIsImF1ZCI6Imh0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbS9vL29hdXRoMi90b2tlbiIsImV4cCI6MTMyODU3MzM4MSwiaWF0IjoxMzI4NTY5NzgxfQ.RZVpzWygMLuL-n3GwjW1_yhQhrqDacyvaXkuf8HcJl8EtXYjGjMaW5oiM5cgAaIorrqgYlp4DPF_GuncFqg9uDZrx7pMmCZ_yHfxhSCXru3gbXrZvAIicNQZMFxrEEn4REVuq7DjkTMyCMGCY1dpMa8aWfTQFt3Eh7smLchaZsU
' https://oauth2.googleapis.com/token

প্রতিক্রিয়া পরিচালনা

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

{
  "access_token": "1/8xbJqaOZXSUZbHLl5EOtu1pxz3fmmetKx9W8CV4t79M",
  "scope": "https://www.googleapis.com/auth/prediction"
  "token_type": "Bearer",
  "expires_in": 3600
}

expires_in মান দ্বারা নির্দিষ্ট সময়কাল উইন্ডোতে অ্যাক্সেস টোকেনগুলি পুনঃব্যবহার করা যেতে পারে।

গুরুত্বপূর্ণ নিরাপত্তা বিবেচনা: ছদ্মবেশ বোঝা

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

গুগল এপিআই-তে কল করুন

জাভা

নিম্নলিখিত ধাপগুলি সম্পন্ন করে Google API গুলিকে কল করতে GoogleCredentials অবজেক্ট ব্যবহার করুন:

  1. GoogleCredentials অবজেক্ট ব্যবহার করে আপনি যে API কল করতে চান তার জন্য একটি পরিষেবা অবজেক্ট তৈরি করুন। উদাহরণস্বরূপ:
    SQLAdmin sqladmin =
        new SQLAdmin.Builder(httpTransport, JSON_FACTORY, credentials).build();
  2. পরিষেবা অবজেক্ট দ্বারা প্রদত্ত ইন্টারফেস ব্যবহার করে API পরিষেবাতে অনুরোধ করুন। উদাহরণস্বরূপ, exciting-example-123 প্রকল্পে ক্লাউড SQL ডাটাবেসের উদাহরণ তালিকাভুক্ত করতে:
    SQLAdmin.Instances.List instances =
        sqladmin.instances().list("exciting-example-123").execute();

পাইথন

নিম্নলিখিত ধাপগুলি সম্পন্ন করে Google API গুলিকে কল করার জন্য অনুমোদিত Credentials অবজেক্ট ব্যবহার করুন:

  1. আপনি যে API কল করতে চান তার জন্য একটি সার্ভিস অবজেক্ট তৈরি করুন। আপনি API এর নাম এবং সংস্করণ এবং অনুমোদিত Credentials অবজেক্ট সহ build ফাংশন কল করে একটি সার্ভিস অবজেক্ট তৈরি করতে পারেন। উদাহরণস্বরূপ, Cloud SQL Administration API এর 1beta3 সংস্করণ কল করতে:
    import googleapiclient.discovery
    
    sqladmin = googleapiclient.discovery.build('sqladmin', 'v1beta3', credentials=credentials)
  2. পরিষেবা অবজেক্ট দ্বারা প্রদত্ত ইন্টারফেস ব্যবহার করে API পরিষেবাতে অনুরোধ করুন। উদাহরণস্বরূপ, exciting-example-123 প্রকল্পে ক্লাউড SQL ডাটাবেসের উদাহরণ তালিকাভুক্ত করতে:
    response = sqladmin.instances().list(project='exciting-example-123').execute()

HTTP/বিশ্রাম

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

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

HTTP GET উদাহরণ

Authorization: Bearer HTTP হেডার ব্যবহার করে drive.files এন্ডপয়েন্টে (Drive Files API) একটি কল নিম্নলিখিতটির মতো দেখতে পারে। মনে রাখবেন যে আপনাকে নিজের অ্যাক্সেস টোকেন নির্দিষ্ট করতে হবে:

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

অ্যাক্সেস টোকেনের মেয়াদ শেষ হলে

Google OAuth 2.0 Authorization Server দ্বারা জারি করা অ্যাক্সেস টোকেনগুলি expires_in মান দ্বারা প্রদত্ত সময়কালের পরে মেয়াদ শেষ হয়ে যায়। যখন একটি অ্যাক্সেস টোকেনের মেয়াদ শেষ হয়ে যায়, তখন অ্যাপ্লিকেশনটি আরেকটি JWT তৈরি করবে, এটিতে স্বাক্ষর করবে এবং আরেকটি অ্যাক্সেস টোকেনের অনুরোধ করবে।

JWT ত্রুটি কোডগুলি

error ক্ষেত্র error_description ক্ষেত্র অর্থ কিভাবে সমাধান করবেন
unauthorized_client Unauthorized client or scope in request. আপনি যদি ডোমেন-ওয়াইড ডেলিগেশন ব্যবহার করার চেষ্টা করেন, তাহলে ব্যবহারকারীর ডোমেনের অ্যাডমিন কনসোলে পরিষেবা অ্যাকাউন্টটি অনুমোদিত নয়।

নিশ্চিত করুন যে পরিষেবা অ্যাকাউন্টটি অ্যাডমিন কনসোলের ডোমেন-ওয়াইড ডেলিগেশন পৃষ্ঠায় sub -ক্লেইম (ক্ষেত্র) ব্যবহারকারীর জন্য অনুমোদিত।

সাধারণত কয়েক মিনিট সময় লাগে, তবে আপনার Google অ্যাকাউন্টের সমস্ত ব্যবহারকারীর কাছে অনুমোদন প্রচারিত হতে ২৪ ঘন্টা পর্যন্ত সময় লাগতে পারে।

unauthorized_client Client is unauthorized to retrieve access tokens using this method, or client not authorized for any of the scopes requested. অ্যাডমিন কনসোলে ক্লায়েন্ট আইডি (সাংখ্যিক) ব্যবহার না করে ক্লায়েন্ট ইমেল ঠিকানা ব্যবহার করে একটি পরিষেবা অ্যাকাউন্ট অনুমোদিত করা হয়েছিল, অথবা অনুমোদনের জন্য একটি Google গ্রুপ ব্যবহার করা হয়েছিল। অ্যাডমিন কনসোলের ডোমেন-ওয়াইড ডেলিগেশন পৃষ্ঠায়, ক্লায়েন্টটি সরিয়ে ফেলুন এবং এটিকে সংখ্যাসূচক আইডি দিয়ে পুনরায় যুক্ত করুন, অথবা গুগল গ্রুপটি সরিয়ে পৃথক পরিষেবা বা ব্যবহারকারী অ্যাকাউন্ট দিয়ে প্রতিস্থাপন করুন।
access_denied (যেকোন মান) আপনি যদি ডোমেন-ওয়াইড ডেলিগেশন ব্যবহার করেন, তাহলে অ্যাডমিন কনসোলে এক বা একাধিক অনুরোধ করা স্কোপ অনুমোদিত নয়।

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

"ব্যক্তিগতভাবে নিয়ন্ত্রিত নয় এমন পরিষেবাগুলিতে অ্যাক্সেস পরিচালনা করুন" পর্যালোচনা করে নিশ্চিত করুন যে Google পরিষেবাগুলিতে অ্যাক্সেস সীমাবদ্ধ নয়।

সাধারণত কয়েক মিনিট সময় লাগে, তবে আপনার Google অ্যাকাউন্টের সমস্ত ব্যবহারকারীর কাছে অনুমোদন প্রচারিত হতে ২৪ ঘন্টা পর্যন্ত সময় লাগতে পারে।

admin_policy_enforced (যেকোন মান) Google Workspace অ্যাডমিনিস্ট্রেটরের নীতির কারণে, Google অ্যাকাউন্ট অনুরোধ করা এক বা একাধিক স্কোপ অনুমোদন করতে পারছে না।

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

invalid_client (যেকোন মান)

OAuth ক্লায়েন্ট বা JWT টোকেনটি অবৈধ অথবা ভুলভাবে কনফিগার করা হয়েছে।

বিস্তারিত জানার জন্য ত্রুটির বিবরণটি দেখুন।

নিশ্চিত করুন যে JWT টোকেনটি বৈধ এবং সঠিক দাবি রয়েছে।

OAuth ক্লায়েন্ট এবং পরিষেবা অ্যাকাউন্ট সঠিকভাবে কনফিগার করা আছে কিনা এবং আপনি সঠিক ইমেল ঠিকানা ব্যবহার করছেন কিনা তা পরীক্ষা করুন।

JWT টোকেনটি সঠিক কিনা এবং অনুরোধে থাকা ক্লায়েন্ট আইডির জন্য ইস্যু করা হয়েছে কিনা তা পরীক্ষা করুন।

deleted_client (যেকোন মান)

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

এমন একটি ক্লায়েন্ট আইডি ব্যবহার করুন যা এখনও সক্রিয়।

invalid_grant Not a valid email বা Invalid email or User ID. ব্যবহারকারীর অস্তিত্ব নেই। sub ক্লেইম (ক্ষেত্র) এর ইমেল ঠিকানাটি সঠিক কিনা তা পরীক্ষা করুন।
invalid_grant

Invalid JWT: Token must be a short-lived token (60 minutes) and in a reasonable timeframe. Check your 'iat' and 'exp' values and use a clock with skew to account for clock differences between systems.

সাধারণত, এর অর্থ হল স্থানীয় সিস্টেমের সময় সঠিক নয়। ভবিষ্যতে যদি exp মান iat মানের থেকে 65 মিনিটের বেশি হয়, অথবা exp মান iat মানের থেকে কম হয়, তাহলেও এটি ঘটতে পারে।

নিশ্চিত করুন যে সিস্টেমে JWT তৈরি করা হয়েছে তার ঘড়িটি সঠিক। প্রয়োজনে, আপনার সময় Google NTP এর সাথে সিঙ্ক করুন।

invalid_grant Invalid JWT Signature.

JWT অ্যাসারেন্সটি এমন একটি প্রাইভেট কী দিয়ে স্বাক্ষরিত যা ক্লায়েন্ট ইমেল দ্বারা চিহ্নিত পরিষেবা অ্যাকাউন্টের সাথে সম্পর্কিত নয় অথবা ব্যবহৃত কীটি মুছে ফেলা হয়েছে, অক্ষম করা হয়েছে, অথবা মেয়াদোত্তীর্ণ হয়েছে।

অন্যথায়, JWT দাবিটি ভুলভাবে এনকোড করা হতে পারে - এটি অবশ্যই Base64-এনকোডেড হতে হবে, নতুন লাইন বা প্যাডিং সমান চিহ্ন ছাড়াই।

JWT দাবি সেটটি ডিকোড করুন এবং যাচাই করুন যে দাবিতে স্বাক্ষরকারী কীটি পরিষেবা অ্যাকাউন্টের সাথে সম্পর্কিত।

JWT সঠিকভাবে তৈরি হয়েছে কিনা তা নিশ্চিত করতে Google-এর সরবরাহিত OAuth লাইব্রেরি ব্যবহার করার চেষ্টা করুন।

invalid_scope Invalid OAuth scope or ID token audience provided. কোনও স্কোপ অনুরোধ করা হয়নি (স্কোপের খালি তালিকা), অথবা অনুরোধ করা স্কোপগুলির মধ্যে একটি বিদ্যমান নেই (অর্থাৎ অবৈধ)।

JWT-এর scope দাবি (ক্ষেত্র) পূরণ করা হয়েছে কিনা তা নিশ্চিত করুন এবং আপনি যে API গুলি ব্যবহার করতে চান তার জন্য নথিভুক্ত স্কোপের সাথে এতে থাকা স্কোপগুলির তুলনা করুন, যাতে কোনও ত্রুটি বা টাইপো না থাকে।

মনে রাখবেন যে scope দাবির স্কোপের তালিকা কমা দিয়ে নয়, স্পেস দিয়ে আলাদা করতে হবে।

disabled_client The OAuth client was disabled. JWT অ্যাসারেন্স স্বাক্ষর করতে ব্যবহৃত কীটি নিষ্ক্রিয় করা আছে।

যান Google API Console, এবং IAM & Admin > Service Accounts এর অধীনে, সেই পরিষেবা অ্যাকাউন্টটি সক্ষম করুন যাতে "কী আইডি" থাকে যা দাবি স্বাক্ষর করতে ব্যবহৃত হয়।

org_internal This client is restricted to users within its organization. অনুরোধে থাকা OAuth ক্লায়েন্ট আইডিটি একটি নির্দিষ্ট Google ক্লাউড সংস্থার Google অ্যাকাউন্টগুলিতে অ্যাক্সেস সীমিত করার একটি প্রকল্পের অংশ।

প্রমাণীকরণের জন্য প্রতিষ্ঠানের একটি পরিষেবা অ্যাকাউন্ট ব্যবহার করুন। আপনার OAuth অ্যাপ্লিকেশনের জন্য ব্যবহারকারীর ধরণের কনফিগারেশন নিশ্চিত করুন।

সংযোজন: OAuth ছাড়া পরিষেবা অ্যাকাউন্ট অনুমোদন

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

আপনি যে API কল করতে চান তার যদি Google APIs GitHub রিপোজিটরিতে প্রকাশিত একটি পরিষেবা সংজ্ঞা থাকে, তাহলে আপনি অ্যাক্সেস টোকেনের পরিবর্তে JWT ব্যবহার করে অনুমোদিত API কল করতে পারেন। এটি করার জন্য:

  1. একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন । অ্যাকাউন্ট তৈরি করার সময় যে JSON ফাইলটি পাবেন তা অবশ্যই সংরক্ষণ করুন।
  2. jwt.io তে পাওয়া যেকোনো স্ট্যান্ডার্ড JWT লাইব্রেরি ব্যবহার করে, নিম্নলিখিত উদাহরণের মতো হেডার এবং পেলোড সহ একটি JWT তৈরি করুন:
    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "abcdef1234567890"
    }
    .
    {
      "iss": "123456-compute@developer.gserviceaccount.com",
      "sub": "123456-compute@developer.gserviceaccount.com",
      "aud": "https://firestore.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600
    }
    • হেডারের kid ফিল্ডের জন্য, আপনার পরিষেবা অ্যাকাউন্টের ব্যক্তিগত কী আইডি উল্লেখ করুন। আপনি আপনার পরিষেবা অ্যাকাউন্ট JSON ফাইলের private_key_id ফিল্ডে এই মানটি খুঁজে পেতে পারেন।
    • iss এবং sub ফিল্ডের জন্য, আপনার সার্ভিস অ্যাকাউন্টের ইমেল ঠিকানা উল্লেখ করুন। আপনি আপনার সার্ভিস অ্যাকাউন্ট JSON ফাইলের client_email ফিল্ডে এই মানটি খুঁজে পেতে পারেন। এই মানটি ক্লায়েন্টকে অনন্যভাবে শনাক্ত করে এবং কার্যকরীভাবে ক্লায়েন্ট আইডি।
    • aud ক্ষেত্রের জন্য, API এন্ডপয়েন্ট নির্দিষ্ট করুন। উদাহরণস্বরূপ: https:// SERVICE .googleapis.com/
    • iat ক্ষেত্রের জন্য, বর্তমান Unix epoch সময় উল্লেখ করুন, এবং exp ক্ষেত্রের জন্য, ঠিক 3600 সেকেন্ড পরে সময় উল্লেখ করুন, যখন JWT মেয়াদ শেষ হবে।

আপনার পরিষেবা অ্যাকাউন্ট JSON ফাইলে পাওয়া প্রাইভেট কী ব্যবহার করে RSA-256 দিয়ে JWT সাইন করুন।

উদাহরণস্বরূপ:

জাভা

google-auth-library-java এবং java-jwt ব্যবহার করে:

import com.google.auth.oauth2.ServiceAccountCredentials;
...
GoogleCredentials credentials =
        GoogleCredentials.fromStream(new FileInputStream("MyProject-1234.json"));
PrivateKey privateKey = ((ServiceAccountCredentials) credentials).getPrivateKey();
String privateKeyId = ((ServiceAccountCredentials) credentials).getPrivateKeyId();

long now = System.currentTimeMillis();

try {
    Algorithm algorithm = Algorithm.RSA256(null, privateKey);
    String signedJwt = JWT.create()
        .withKeyId(privateKeyId)
        .withIssuer("123456-compute@developer.gserviceaccount.com")
        .withSubject("123456-compute@developer.gserviceaccount.com")
        .withAudience("https://firestore.googleapis.com/")
        .withIssuedAt(new Date(now))
        .withExpiresAt(new Date(now + 3600 * 1000L))
        .sign(algorithm);
} catch ...

পাইথন

PyJWT ব্যবহার করে:

iat = time.time()
exp = iat + 3600
payload = {'iss': '123456-compute@developer.gserviceaccount.com',
           'sub': '123456-compute@developer.gserviceaccount.com',
           'aud': 'https://firestore.googleapis.com/',
           'iat': iat,
           'exp': exp}
additional_headers = {'kid': PRIVATE_KEY_ID_FROM_JSON}
signed_jwt = jwt.encode(payload, PRIVATE_KEY_FROM_JSON, headers=additional_headers,
                       algorithm='RS256')
  1. স্বাক্ষরিত JWT কে বহনকারী টোকেন হিসেবে ব্যবহার করে API কল করুন:
    GET /v1/projects/abc/databases/123/indexes HTTP/1.1
    Authorization: Bearer SIGNED_JWT
    Host: firestore.googleapis.com

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

আপনার ব্যবহারকারীদের অ্যাকাউন্ট সুরক্ষিত রাখার জন্য আপনার আরও একটি পদক্ষেপ নেওয়া উচিত, তা হল 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

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