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

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

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

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

এই দস্তাবেজটি বর্ণনা করে যে কীভাবে একটি অ্যাপ্লিকেশন Google API ক্লায়েন্ট লাইব্রেরি (প্রস্তাবিত) বা HTTP ব্যবহার করে সার্ভার-টু-সার্ভার OAuth 2.0 ফ্লো সম্পূর্ণ করতে পারে।

ওভারভিউ

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

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

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

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

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

যদি আপনার অ্যাপ্লিকেশন Google অ্যাপ ইঞ্জিনে চলে, আপনি যখন আপনার প্রকল্প তৈরি করেন তখন একটি পরিষেবা অ্যাকাউন্ট স্বয়ংক্রিয়ভাবে সেট আপ হয়ে যায়।

যদি আপনার অ্যাপ্লিকেশনটি 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. ঐচ্ছিক: প্রকল্পে এই পরিষেবা অ্যাকাউন্ট অ্যাক্সেস মঞ্জুর করার অধীনে, পরিষেবা অ্যাকাউন্টে মঞ্জুর করার জন্য IAM ভূমিকাগুলি নির্বাচন করুন৷
  6. অবিরত ক্লিক করুন.
  7. ঐচ্ছিক: ব্যবহারকারীদের এই পরিষেবা অ্যাকাউন্টে অ্যাক্সেস মঞ্জুর করার অধীনে, পরিষেবা অ্যাকাউন্ট ব্যবহার এবং পরিচালনা করার অনুমতিপ্রাপ্ত ব্যবহারকারী বা গোষ্ঠীগুলিকে যুক্ত করুন৷
  8. সম্পন্ন ক্লিক করুন.

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

  1. আপনার তৈরি পরিষেবা অ্যাকাউন্টের ইমেল ঠিকানায় ক্লিক করুন।
  2. কী ট্যাবে ক্লিক করুন।
  3. কী যোগ করুন ড্রপ-ডাউন তালিকায়, নতুন কী তৈরি করুন নির্বাচন করুন।
  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 Drive API এবং Google Calendar API-এ ডোমেন-ব্যাপী সম্পূর্ণ অ্যাক্সেসের প্রয়োজন হয়, তাহলে লিখুন: https://www.googleapis.com/auth/drive, https://www.googleapis.com/auth /ক্যালেন্ডার
  6. অনুমোদন ক্লিক করুন.

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

একটি অর্পিত API কল করার প্রস্তুতি নিচ্ছে৷

জাভা

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

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.services.sqladmin.SQLAdminScopes;

// ...

GoogleCredential credential = GoogleCredential.fromStream(new FileInputStream("MyProject-1234.json"))
    .createScoped(Collections.singleton(SQLAdminScopes.SQLSERVICE_ADMIN));

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

ডোমেইন-ওয়াইড অথরিটি অর্পণ করুন

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

GoogleCredential credential = GoogleCredential.fromStream(new FileInputStream("MyProject-1234.json"))
    .createScoped(Collections.singleton(SQLAdminScopes.SQLSERVICE_ADMIN))
    .createDelegated("workspace-user@example.com");

উপরের কোডটি GoogleCredential অবজেক্ট ব্যবহার করে তার createDelegated() পদ্ধতিতে কল করে। createDelegated() পদ্ধতির আর্গুমেন্টটি অবশ্যই একজন ব্যবহারকারী হতে হবে যা আপনার ওয়ার্কস্পেস অ্যাকাউন্টের অন্তর্গত। অনুরোধ করার জন্য আপনার কোডটি আপনার পরিষেবা অ্যাকাউন্ট ব্যবহার করে 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/service.json'
    
    credentials = service_account.Credentials.from_service_account_file(
            SERVICE_ACCOUNT_FILE, scopes=SCOPES)

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

  2. ডোমেইন-ওয়াইড অথরিটি অর্পণ করুন

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

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

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

HTTP/REST

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

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

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

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

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

আপনার সার্ভার অ্যাপ্লিকেশন Google অনুমোদন সার্ভার থেকে একটি টোকেন অনুরোধ করতে একটি 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 হেডার গঠন করা

শিরোনামটিতে তিনটি ক্ষেত্র রয়েছে যা সাইনিং অ্যালগরিদম, দাবীর ফর্ম্যাট এবং [পরিষেবা অ্যাকাউন্ট কী-এর কী আইডি](https://cloud.google.com/iam/docs/reference/rest/v1/ নির্দেশ করে) projects.serviceAccounts.keys) যেটি JWT স্বাক্ষর করতে ব্যবহৃত হয়েছিল। অ্যালগরিদম এবং বিন্যাস বাধ্যতামূলক, এবং প্রতিটি ক্ষেত্রের শুধুমাত্র একটি মান আছে। অতিরিক্ত অ্যালগরিদম এবং বিন্যাস চালু হওয়ার সাথে সাথে এই শিরোনামটি সেই অনুযায়ী পরিবর্তিত হবে। কী আইডিটি ঐচ্ছিক এবং যদি একটি ভুল কী আইডি নির্দিষ্ট করা হয় GCP টোকেন যাচাই করার জন্য পরিষেবা অ্যাকাউন্টের সাথে যুক্ত সমস্ত কী চেষ্টা করবে এবং কোন বৈধ কী না পাওয়া গেলে টোকেন প্রত্যাখ্যান করবে। 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-নিরাপদ এনকোডে সিরিয়াল করা উচিত। নীচে একটি 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 অনুমোদন সার্ভার দ্বারা সমর্থিত একমাত্র সাইনিং অ্যালগরিদম হল SHA-256 হ্যাশিং অ্যালগরিদম ব্যবহার করে RSA৷ এটি JWT হেডারে alg ক্ষেত্রে RS256 হিসাবে প্রকাশ করা হয়েছে।

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

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

{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 এনকোডেড। URLটি নীচে দেখানো হয়েছে:

https://oauth2.googleapis.com/token

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

নাম বর্ণনা
grant_type নিম্নলিখিত স্ট্রিং ব্যবহার করুন, প্রয়োজনে ইউআরএল-এনকোড করা: 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 মান দ্বারা নির্দিষ্ট সময়কাল উইন্ডো চলাকালীন অ্যাক্সেস টোকেনগুলি পুনরায় ব্যবহার করা যেতে পারে।

Google API কল করা হচ্ছে

জাভা

নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করে Google API কল করতে GoogleCredential অবজেক্ট ব্যবহার করুন:

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

পাইথন

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

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

HTTP/REST

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

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

HTTP GET উদাহরণ

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

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 অনুমোদন সার্ভার দ্বারা জারি করা অ্যাক্সেস টোকেন expires_in মান দ্বারা প্রদত্ত সময়কালের পরে মেয়াদ শেষ হয়ে যায়। যখন একটি অ্যাক্সেস টোকেনের মেয়াদ শেষ হয়ে যায়, তখন অ্যাপ্লিকেশনটির অন্য একটি JWT তৈরি করা উচিত, এটিতে স্বাক্ষর করা উচিত এবং আরেকটি অ্যাক্সেস টোকেনের অনুরোধ করা উচিত।

JWT ত্রুটি কোড

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

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

যদিও এটি সাধারণত কয়েক মিনিট সময় নেয়, আপনার Google অ্যাকাউন্টের সমস্ত ব্যবহারকারীর কাছে অনুমোদনের জন্য এটি 24 ঘন্টা পর্যন্ত সময় নিতে পারে৷

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

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

যদিও এটি সাধারণত কয়েক মিনিট সময় নেয়, আপনার Google অ্যাকাউন্টের সমস্ত ব্যবহারকারীর কাছে অনুমোদনের জন্য এটি 24 ঘন্টা পর্যন্ত সময় নিতে পারে৷

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

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

invalid_client (যে কোনো মান)

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

বিস্তারিত জানার জন্য ত্রুটি বিবরণ পড়ুন.

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

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

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

invalid_grant Not a valid email. ব্যবহারকারীর অস্তিত্ব নেই। 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 সঠিকভাবে তৈরি হয়েছে তা নিশ্চিত করতে Google-প্রদত্ত OAuth লাইব্রেরি ব্যবহার করার চেষ্টা করুন।

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

নিশ্চিত করুন যে JWT-এর scope ক্লেইম (ক্ষেত্র) জনসংখ্যাপূর্ণ, এবং আপনি যে APIs ব্যবহার করতে চান তার জন্য ডকুমেন্টেড স্কোপের সাথে এটিতে থাকা স্কোপের তুলনা করুন, যাতে কোনও ত্রুটি বা টাইপো নেই।

মনে রাখবেন যে 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 ছাড়া পরিষেবা অ্যাকাউন্ট অনুমোদন

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

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

  1. উপরে বর্ণিত হিসাবে একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন । আপনি অ্যাকাউন্ট তৈরি করার সময় আপনি যে JSON ফাইলটি পাবেন তা রাখতে ভুলবেন না।
  2. যেকোনো স্ট্যান্ডার্ড JWT লাইব্রেরি ব্যবহার করে, যেমন jwt.io এ পাওয়া যায়, একটি হেডার সহ একটি 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 ক্ষেত্রের জন্য, বর্তমান ইউনিক্স সময় নির্দিষ্ট করুন, এবং exp ক্ষেত্রের জন্য, ঠিক 3600 সেকেন্ড পরে, কখন JWT মেয়াদ শেষ হবে তা নির্দিষ্ট করুন।

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

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

জাভা

google-api-java-client এবং java-jwt ব্যবহার করে:

GoogleCredential credential =
        GoogleCredential.fromStream(new FileInputStream("MyProject-1234.json"));
PrivateKey privateKey = credential.getServiceAccountPrivateKey();
String privateKeyId = credential.getServiceAccountPrivateKeyId();

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