গুগল OAuth 2.0 সিস্টেম সার্ভার-টু-সার্ভার ইন্টারঅ্যাকশন সমর্থন করে, যেমন একটি ওয়েব অ্যাপ্লিকেশন এবং একটি গুগল পরিষেবার মধ্যেকার ইন্টারঅ্যাকশন। এই পরিস্থিতির জন্য আপনার একটি সার্ভিস অ্যাকাউন্ট প্রয়োজন, যা কোনো স্বতন্ত্র ব্যবহারকারীর পরিবর্তে আপনার অ্যাপ্লিকেশনের নিজস্ব একটি অ্যাকাউন্ট। আপনার অ্যাপ্লিকেশনটি সার্ভিস অ্যাকাউন্টের পক্ষ থেকে গুগল এপিআই (API) কল করে, ফলে ব্যবহারকারীরা সরাসরি জড়িত থাকেন না। এই পরিস্থিতিকে কখনও কখনও "টু-লেগড OAuth" বা "2LO" বলা হয়। (এর সাথে সম্পর্কিত পরিভাষা "থ্রি-লেগড OAuth" সেইসব পরিস্থিতিকে বোঝায় যেখানে আপনার অ্যাপ্লিকেশন ব্যবহারকারীদের পক্ষ থেকে গুগল এপিআই কল করে এবং যেখানে কখনও কখনও ব্যবহারকারীর সম্মতির প্রয়োজন হয়।)
আরও তথ্যের জন্য পরিষেবা অ্যাকাউন্ট সম্পর্কিত সর্বোত্তম অনুশীলনসমূহ দেখুন।
সাধারণত, কোনো অ্যাপ্লিকেশন যখন ব্যবহারকারীর ডেটার পরিবর্তে নিজের ডেটা নিয়ে কাজ করার জন্য গুগল এপিআই (Google APIs) ব্যবহার করে, তখন সেটি একটি সার্ভিস অ্যাকাউন্ট ব্যবহার করে। উদাহরণস্বরূপ, যে অ্যাপ্লিকেশনটি ডেটা সংরক্ষণের জন্য গুগল ক্লাউড ডেটাস্টোর (Google Cloud Datastore) ব্যবহার করে, সেটি গুগল ক্লাউড ডেটাস্টোর এপিআই-তে তার কলগুলোকে প্রমাণীকরণের জন্য একটি সার্ভিস অ্যাকাউন্ট ব্যবহার করবে।
গুগল ওয়ার্কস্পেস ডোমেইন অ্যাডমিনিস্ট্রেটররা ডোমেইনের ব্যবহারকারীদের পক্ষ থেকে ব্যবহারকারীর ডেটা অ্যাক্সেস করার জন্য সার্ভিস অ্যাকাউন্টগুলোকে ডোমেইন-ব্যাপী কর্তৃত্বও প্রদান করতে পারেন।
এই ডকুমেন্টটিতে বর্ণনা করা হয়েছে কিভাবে একটি অ্যাপ্লিকেশন গুগল এপিআই ক্লায়েন্ট লাইব্রেরি (প্রস্তাবিত) অথবা এইচটিটিপি ব্যবহার করে সার্ভার-টু-সার্ভার OAuth 2.0 ফ্লো সম্পন্ন করতে পারে।
সংক্ষিপ্ত বিবরণ
সার্ভার-টু-সার্ভার ইন্টারঅ্যাকশন সমর্থন করার জন্য, প্রথমে এপিআই কনসোলে আপনার প্রোজেক্টের জন্য একটি সার্ভিস অ্যাকাউন্ট তৈরি করুন। যদি আপনি আপনার গুগল ওয়ার্কস্পেস অ্যাকাউন্টের ব্যবহারকারীদের ডেটা অ্যাক্সেস করতে চান, তাহলে সার্ভিস অ্যাকাউন্টটিকে ডোমেন-ব্যাপী অ্যাক্সেস অর্পণ করুন।
এরপর, আপনার অ্যাপ্লিকেশনটি সার্ভিস অ্যাকাউন্টের ক্রেডেনশিয়াল ব্যবহার করে OAuth 2.0 অথ সার্ভার থেকে একটি অ্যাক্সেস টোকেনের অনুরোধ করার মাধ্যমে অনুমোদিত API কল করার জন্য প্রস্তুত হয়।
অবশেষে, আপনার অ্যাপ্লিকেশনটি অ্যাক্সেস টোকেনটি ব্যবহার করে গুগল এপিআই কল করতে পারবে।
একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন
একটি সার্ভিস অ্যাকাউন্টের ক্রেডেনশিয়ালের মধ্যে একটি অনন্য জেনারেটেড ইমেল অ্যাড্রেস এবং অন্তত একটি পাবলিক/প্রাইভেট কী পেয়ার অন্তর্ভুক্ত থাকে। যদি ডোমেন-ব্যাপী ডেলিগেশন সক্রিয় করা থাকে, তাহলে একটি ক্লায়েন্ট আইডি-ও সার্ভিস অ্যাকাউন্টের ক্রেডেনশিয়ালের অংশ হয়।
আপনার অ্যাপ্লিকেশনটি যদি গুগল অ্যাপ ইঞ্জিনে চলে, তাহলে প্রজেক্ট তৈরি করার সময় একটি সার্ভিস অ্যাকাউন্ট স্বয়ংক্রিয়ভাবে তৈরি হয়ে যায়।
যদি আপনার অ্যাপ্লিকেশনটি গুগল কম্পিউট ইঞ্জিনে চলে, তাহলে আপনার প্রজেক্ট তৈরি করার সময় একটি সার্ভিস অ্যাকাউন্টও স্বয়ংক্রিয়ভাবে সেট আপ হয়ে যায়, কিন্তু একটি গুগল কম্পিউট ইঞ্জিন ইনস্ট্যান্স তৈরি করার সময় আপনার অ্যাপ্লিকেশনের যে স্কোপগুলিতে অ্যাক্সেস প্রয়োজন, তা আপনাকে অবশ্যই নির্দিষ্ট করে দিতে হবে। আরও তথ্যের জন্য, সার্ভিস অ্যাকাউন্ট ব্যবহার করার জন্য একটি ইনস্ট্যান্স প্রস্তুত করা দেখুন।
যদি আপনার অ্যাপ্লিকেশনটি গুগল অ্যাপ ইঞ্জিন বা গুগল কম্পিউট ইঞ্জিনে না চলে, তাহলে আপনাকে অবশ্যই গুগল এপিআই কনসোল থেকে এই ক্রেডেনশিয়ালগুলো সংগ্রহ করতে হবে। সার্ভিস-অ্যাকাউন্ট ক্রেডেনশিয়াল তৈরি করতে, অথবা আপনার ইতিমধ্যে তৈরি করা পাবলিক ক্রেডেনশিয়ালগুলো দেখতে, নিম্নলিখিত পদক্ষেপগুলো অনুসরণ করুন:
প্রথমে, একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন:
- সার্ভিস অ্যাকাউন্টস পেজটি খুলুন।
- অনুরোধ করা হলে, একটি প্রজেক্ট নির্বাচন করুন অথবা নতুন একটি তৈরি করুন।
- সার্ভিস অ্যাকাউন্ট তৈরি করতে ক্লিক করুন।
- সার্ভিস অ্যাকাউন্ট ডিটেইলস (Service account details) -এর অধীনে, সার্ভিস অ্যাকাউন্টটির জন্য একটি নাম, আইডি এবং বিবরণ টাইপ করুন, তারপর ক্রিয়েট অ্যান্ড কন্টিনিউ (Create and continue) -তে ক্লিক করুন।
- ঐচ্ছিক: ‘এই পরিষেবা অ্যাকাউন্টকে প্রকল্পে অ্যাক্সেস দিন’ এর অধীনে, পরিষেবা অ্যাকাউন্টটিকে প্রদান করার জন্য IAM ভূমিকাগুলি নির্বাচন করুন।
- চালিয়ে যান-এ ক্লিক করুন।
- ঐচ্ছিক: ‘ব্যবহারকারীদের এই পরিষেবা অ্যাকাউন্টে অ্যাক্সেস দিন’ এর অধীনে, সেইসব ব্যবহারকারী বা গোষ্ঠীকে যুক্ত করুন যারা পরিষেবা অ্যাকাউন্টটি ব্যবহার ও পরিচালনা করার অনুমতিপ্রাপ্ত।
- সম্পন্ন ক্লিক করুন।
এরপর, একটি সার্ভিস অ্যাকাউন্ট কী তৈরি করুন:
- আপনার তৈরি করা পরিষেবা অ্যাকাউন্টের ইমেল ঠিকানাটিতে ক্লিক করুন।
- Keys ট্যাবে ক্লিক করুন।
- Add key ড্রপ-ডাউন তালিকা থেকে Create new key নির্বাচন করুন।
- তৈরি করুন- এ ক্লিক করুন।
আরও জানতে, সার্ভিস অ্যাকাউন্ট কী পরিচালনার সর্বোত্তম পদ্ধতি দেখুন।
আপনি ইমেল ঠিকানা, পাবলিক কী ফিঙ্গারপ্রিন্ট এবং অন্যান্য তথ্য দেখতে, অথবা অতিরিক্ত পাবলিক/প্রাইভেট কী পেয়ার তৈরি করতে যেকোনো সময় এপিআই কনসোলে ফিরে আসতে পারেন। এপিআই কনসোলে সার্ভিস অ্যাকাউন্ট ক্রেডেনশিয়াল সম্পর্কে আরও বিস্তারিত জানতে, এপিআই কনসোল হেল্প ফাইলের 'সার্ভিস অ্যাকাউন্টস' অংশটি দেখুন।
সার্ভিস অ্যাকাউন্টের ইমেল ঠিকানাটি লিখে রাখুন এবং সার্ভিস অ্যাকাউন্টের প্রাইভেট কী ফাইলটি আপনার অ্যাপ্লিকেশনের নাগালের মধ্যে থাকা কোনো স্থানে সংরক্ষণ করুন। অনুমোদিত এপিআই কল করার জন্য আপনার অ্যাপ্লিকেশনের এগুলোর প্রয়োজন হবে।
পরিষেবা অ্যাকাউন্টে ডোমেন-ব্যাপী কর্তৃত্ব অর্পণ করুন
একটি গুগল ওয়ার্কস্পেস অ্যাকাউন্ট ব্যবহার করে, প্রতিষ্ঠানের একজন ওয়ার্কস্পেস অ্যাডমিনিস্ট্রেটর গুগল ওয়ার্কস্পেস ডোমেইনের ব্যবহারকারীদের পক্ষ থেকে কোনো অ্যাপ্লিকেশনকে তাদের ডেটা অ্যাক্সেস করার অনুমোদন দিতে পারেন। উদাহরণস্বরূপ, একটি অ্যাপ্লিকেশন যা একটি গুগল ওয়ার্কস্পেস ডোমেইনের সমস্ত ব্যবহারকারীর ক্যালেন্ডারে ইভেন্ট যোগ করার জন্য গুগল ক্যালেন্ডার এপিআই ব্যবহার করে, সেটি ব্যবহারকারীদের পক্ষ থেকে গুগল ক্যালেন্ডার এপিআই অ্যাক্সেস করার জন্য একটি সার্ভিস অ্যাকাউন্ট ব্যবহার করবে। একটি ডোমেইনের ব্যবহারকারীদের পক্ষ থেকে ডেটা অ্যাক্সেস করার জন্য কোনো সার্ভিস অ্যাকাউন্টকে অনুমোদন দেওয়াকে কখনও কখনও সার্ভিস অ্যাকাউন্টটির কাছে "ডোমেইন-ব্যাপী কর্তৃত্ব অর্পণ" (delegating domain-wide authority) হিসাবে উল্লেখ করা হয়।
একটি সার্ভিস অ্যাকাউন্টে ডোমেন-ব্যাপী কর্তৃত্ব অর্পণ করতে, গুগল ওয়ার্কস্পেস ডোমেনের একজন সুপার অ্যাডমিনিস্ট্রেটরকে নিম্নলিখিত ধাপগুলি সম্পন্ন করতে হবে:
- আপনার গুগল ওয়ার্কস্পেস ডোমেইনের অ্যাডমিন কনসোল থেকে, প্রধান > নিরাপত্তা > অ্যাক্সেস এবং ডেটা নিয়ন্ত্রণ > এপিআই নিয়ন্ত্রণ- এ যান।
- ডোমেনব্যাপী ডেলিগেশন প্যানে, ‘ম্যানেজ ডোমেন ওয়াইড ডেলিগেশন’ নির্বাচন করুন।
- নতুন যোগ করুন- এ ক্লিক করুন।
- ক্লায়েন্ট আইডি ফিল্ডে সার্ভিস অ্যাকাউন্টের ক্লায়েন্ট আইডি লিখুন। আপনি আপনার সার্ভিস অ্যাকাউন্টের ক্লায়েন্ট আইডি ' সার্ভিস অ্যাকাউন্টস' পেজে খুঁজে পাবেন।
- OAuth scopes (কমা-বিভাজিত) ফিল্ডে, আপনার অ্যাপ্লিকেশনকে যে স্কোপগুলিতে অ্যাক্সেস দেওয়া উচিত তার তালিকা লিখুন। উদাহরণস্বরূপ, যদি আপনার অ্যাপ্লিকেশনের Google Drive API এবং Google Calendar API-তে ডোমেন-ব্যাপী সম্পূর্ণ অ্যাক্সেসের প্রয়োজন হয়, তাহলে লিখুন: https://www.googleapis.com/auth/drive, https://www.googleapis.com/auth/calendar ।
- অনুমোদন করুন- এ ক্লিক করুন।
আপনার অ্যাপ্লিকেশনটির এখন আপনার ওয়ার্কস্পেস ডোমেইনের ব্যবহারকারী হিসাবে এপিআই কল করার (ব্যবহারকারীদের "ছদ্মবেশ ধারণ" করার) ক্ষমতা রয়েছে। আপনি যখন এই অর্পিত এপিআই কলগুলি করার প্রস্তুতি নেবেন, তখন আপনাকে স্পষ্টভাবে সেই ব্যবহারকারীকে নির্দিষ্ট করে দিতে হবে যার ছদ্মবেশ ধারণ করতে চান।
একটি ডেলিগেটেড এপিআই কল করুন
নিম্নলিখিত বিভাগগুলিতে দেখানো হয়েছে কীভাবে গুগল এপিআই ক্লায়েন্ট লাইব্রেরি ব্যবহার করে অথবা HTTP ব্যবহার করে সরাসরি OAuth 2.0 সিস্টেমের সাথে সংযোগ স্থাপন করে একটি অনুমোদিত এপিআই কল করতে হয়।
জাভা
এপিআই কনসোল থেকে ক্লায়েন্টের ইমেল ঠিকানা এবং প্রাইভেট কী পাওয়ার পর, সার্ভিস অ্যাকাউন্টের ক্রেডেনশিয়াল এবং আপনার অ্যাপ্লিকেশনের প্রয়োজনীয় স্কোপগুলো থেকে একটি 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");
GoogleCredentials অবজেক্টটি createDelegated() মেথড কল করতে ব্যবহৃত হয়। createDelegated() মেথডের আর্গুমেন্টটি অবশ্যই আপনার Workspace অ্যাকাউন্টের অন্তর্ভুক্ত একজন ব্যবহারকারী হতে হবে। আপনার অনুরোধকারী কোডটি আপনার সার্ভিস অ্যাকাউন্ট ব্যবহার করে গুগল এপিআই (Google APIs) কল করার জন্য এই ক্রেডেনশিয়ালটি ব্যবহার করবে।
পাইথন
এপিআই কনসোল থেকে ক্লায়েন্টের ইমেল ঠিকানা এবং প্রাইভেট কী পাওয়ার পর, নিম্নলিখিত ধাপগুলি সম্পন্ন করতে পাইথনের জন্য গুগল এপিআই ক্লায়েন্ট লাইব্রেরি ব্যবহার করুন:
- সার্ভিস অ্যাকাউন্টের ক্রেডেনশিয়াল এবং আপনার অ্যাপ্লিকেশনের প্রয়োজনীয় স্কোপগুলো থেকে একটি
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)
আপনি যদি গুগল ক্লাউডে কোনো অ্যাপ তৈরি করেন, তাহলে এর পরিবর্তে অ্যাপ্লিকেশনটির ডিফল্ট ক্রেডেনশিয়াল ব্যবহার করতে পারেন, যা প্রক্রিয়াটিকে সহজ করে তুলতে পারে।
- ডোমেন-ব্যাপী কর্তৃত্ব অর্পণ করুন
যদি আপনি সার্ভিস অ্যাকাউন্টে ডোমেন-ব্যাপী অ্যাক্সেস অর্পণ করে থাকেন এবং কোনো ব্যবহারকারী অ্যাকাউন্টের ছদ্মবেশ ধারণ করতে চান, তাহলে বিদ্যমান
ServiceAccountCredentialsঅবজেক্টেরwith_subjectমেথডটি ব্যবহার করুন। উদাহরণস্বরূপ:delegated_credentials = credentials.with_subject('user@example.org')
আপনার অ্যাপ্লিকেশনে গুগল এপিআই কল করতে ক্রেডেনশিয়ালস অবজেক্টটি ব্যবহার করুন।
HTTP/REST
এপিআই কনসোল থেকে ক্লায়েন্ট আইডি এবং প্রাইভেট কী পাওয়ার পর, আপনার অ্যাপ্লিকেশনটিকে নিম্নলিখিত ধাপগুলি সম্পন্ন করতে হবে:
- একটি JSON ওয়েব টোকেন (JWT) তৈরি করুন, যাতে একটি হেডার, একটি ক্লেইম সেট এবং একটি সিগনেচার অন্তর্ভুক্ত থাকে।
- গুগল OAuth 2.0 অনুমোদন সার্ভার থেকে একটি অ্যাক্সেস টোকেনের জন্য অনুরোধ করুন।
- অথরাইজেশন সার্ভার থেকে প্রাপ্ত JSON রেসপন্সটি হ্যান্ডেল করুন।
পরবর্তী অংশগুলোতে এই ধাপগুলো কীভাবে সম্পন্ন করতে হবে তা বর্ণনা করা হয়েছে।
যদি রেসপন্সে একটি অ্যাক্সেস টোকেন অন্তর্ভুক্ত থাকে, তাহলে আপনি সেই অ্যাক্সেস টোকেন ব্যবহার করে একটি গুগল এপিআই (Google API) কল করতে পারবেন। (যদি রেসপন্সে কোনো অ্যাক্সেস টোকেন অন্তর্ভুক্ত না থাকে, তাহলে আপনার JWT এবং টোকেন রিকোয়েস্ট সঠিকভাবে গঠিত নাও হতে পারে, অথবা সার্ভিস অ্যাকাউন্টটির অনুরোধ করা স্কোপগুলো অ্যাক্সেস করার অনুমতি নাও থাকতে পারে।)
অ্যাক্সেস টোকেনের মেয়াদ শেষ হয়ে গেলে, আপনার অ্যাপ্লিকেশন আরেকটি JWT তৈরি করে, তাতে স্বাক্ষর করে এবং আরেকটি অ্যাক্সেস টোকেনের জন্য অনুরোধ করে।

এই বিভাগের বাকি অংশে 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-তে স্বাক্ষর করতে ব্যবহৃত সার্ভিস অ্যাকাউন্ট কী-এর আইডি । যদি একটি ভুল কী আইডি উল্লেখ করা হয়, তবে সার্ভিস অ্যাকাউন্টের সাথে যুক্ত সমস্ত কী চেষ্টা করা হয়। যদি কোনো বৈধ কী খুঁজে না পাওয়া যায়, তবে টোকেনটি বাতিল করা হয়। ভুল কী আইডিযুক্ত টোকেন বাতিল করার অধিকার গুগল সংরক্ষণ করে।
সার্ভিস অ্যাকাউন্টগুলো 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 | অ্যাসারশনটির মেয়াদ শেষ হওয়ার সময়, যা ১ জানুয়ারী, ১৯৭০-এর ০০:০০:০০ ইউটিসি থেকে সেকেন্ড হিসাবে নির্দিষ্ট করা হয়েছে। ইস্যু করার সময়ের পর এই মানটির সর্বোচ্চ মেয়াদ ১ ঘন্টা। |
iat | দাবিটি জারি করার সময়, যা ১ জানুয়ারী, ১৯৭০-এর ০০:০০:০০ ইউটিসি থেকে সেকেন্ড হিসাবে নির্দিষ্ট করা হয়েছে। |
এটি একটি 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 }
অতিরিক্ত দাবি
কিছু প্রাতিষ্ঠানিক ক্ষেত্রে, একটি অ্যাপ্লিকেশন কোনো সংস্থার একজন নির্দিষ্ট ব্যবহারকারীর পক্ষ থেকে কাজ করার জন্য ডোমেন-ব্যাপী ডেলিগেশন ব্যবহার করতে পারে। কোনো অ্যাপ্লিকেশন ব্যবহারকারীর ছদ্মবেশ ধারণ করার আগে এই ধরনের ছদ্মবেশ ধারণের অনুমতি অবশ্যই প্রদান করতে হবে, এবং এটি সাধারণত একজন সুপার অ্যাডমিনিস্ট্রেটর দ্বারা পরিচালিত হয়। আরও তথ্যের জন্য, 'ডোমেন-ব্যাপী ডেলিগেশন দিয়ে এপিআই অ্যাক্সেস নিয়ন্ত্রণ করুন' দেখুন।
কোনো রিসোর্সে অ্যাপ্লিকেশনকে অর্পিত অ্যাক্সেস প্রদানকারী একটি অ্যাক্সেস টোকেন পেতে, JWT ক্লেইম সেটে ব্যবহারকারীর ইমেল ঠিকানাটি sub ফিল্ডের ভ্যালু হিসেবে অন্তর্ভুক্ত করুন।
| নাম | বর্ণনা |
|---|---|
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 হেডারে থাকা সাইনিং অ্যালগরিদমটি অবশ্যই ব্যবহার করতে হবে। গুগল OAuth 2.0 অথরাইজেশন সার্ভার দ্বারা সমর্থিত একমাত্র সাইনিং অ্যালগরিদম হলো SHA-256 হ্যাশিং অ্যালগরিদম ব্যবহার করে RSA। এটি JWT হেডারের alg ফিল্ডে RS256 হিসাবে প্রকাশ করা হয়।
গুগল এপিআই কনসোল থেকে প্রাপ্ত প্রাইভেট কী ব্যবহার করে SHA256withRSA (যা SHA-256 হ্যাশ ফাংশন সহ RSASSA-PKCS1-V1_5-SIGN নামেও পরিচিত) দিয়ে ইনপুটের UTF-8 উপস্থাপনাটি সাইন করুন। আউটপুটটি একটি বাইট অ্যারে হবে।
এরপর সিগনেচারটিকে অবশ্যই 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 স্কোপগুলি মঞ্জুর করুন এবং এর নিরাপত্তাগত প্রভাবগুলি সম্পর্কে আপনার ধারণা আছে কিনা তা নিশ্চিত করুন।
গুগল এপিআই কল করুন
জাভা
নিম্নলিখিত ধাপগুলি সম্পন্ন করে GoogleCredentials অবজেক্টটি ব্যবহার করে Google API কল করুন:
-
GoogleCredentialsঅবজেক্ট ব্যবহার করে আপনি যে API-টি কল করতে চান তার জন্য একটি সার্ভিস অবজেক্ট তৈরি করুন। উদাহরণস্বরূপ:SQLAdmin sqladmin = new SQLAdmin.Builder(httpTransport, JSON_FACTORY, credentials).build();
- সার্ভিস অবজেক্ট দ্বারা প্রদত্ত ইন্টারফেস ব্যবহার করে এপিআই সার্ভিসে অনুরোধ পাঠান। উদাহরণস্বরূপ, exciting-example-123 প্রোজেক্টে ক্লাউড এসকিউএল ডেটাবেসের ইনস্ট্যান্সগুলো তালিকাভুক্ত করতে:
SQLAdmin.Instances.List instances = sqladmin.instances().list("exciting-example-123").execute();
পাইথন
নিম্নলিখিত ধাপগুলি সম্পন্ন করে অনুমোদিত Credentials অবজেক্টটি ব্যবহার করে গুগল এপিআই কল করুন:
- আপনি যে API-টি কল করতে চান তার জন্য একটি সার্ভিস অবজেক্ট তৈরি করুন। API-এর নাম ও ভার্সন এবং অনুমোদিত
Credentialsঅবজেক্ট সহbuildফাংশনটি কল করে আপনি একটি সার্ভিস অবজেক্ট তৈরি করেন। উদাহরণস্বরূপ, ক্লাউড SQL অ্যাডমিনিস্ট্রেশন API-এর ভার্সন 1beta3 কল করতে:import googleapiclient.discovery sqladmin = googleapiclient.discovery.build('sqladmin', 'v1beta3', credentials=credentials)
- সার্ভিস অবজেক্ট দ্বারা প্রদত্ত ইন্টারফেস ব্যবহার করে এপিআই সার্ভিসে অনুরোধ পাঠান। উদাহরণস্বরূপ, exciting-example-123 প্রোজেক্টে ক্লাউড এসকিউএল ডেটাবেসের ইনস্ট্যান্সগুলো তালিকাভুক্ত করতে:
response = sqladmin.instances().list(project='exciting-example-123').execute()
HTTP/REST
আপনার অ্যাপ্লিকেশন একটি অ্যাক্সেস টোকেন পাওয়ার পর, আপনি একটি নির্দিষ্ট সার্ভিস অ্যাকাউন্ট বা ইউজার অ্যাকাউন্টের পক্ষ থেকে Google API-তে কল করার জন্য টোকেনটি ব্যবহার করতে পারেন, যদি API-টির জন্য প্রয়োজনীয় অ্যাক্সেসের সুযোগ(গুলি) মঞ্জুর করা হয়ে থাকে। এটি করার জন্য, API-তে করা অনুরোধে access_token কোয়েরি প্যারামিটার অথবা Authorization HTTP হেডার Bearer ভ্যালু অন্তর্ভুক্ত করে অ্যাক্সেস টোকেনটি যোগ করুন। সম্ভব হলে, HTTP হেডার ব্যবহার করা শ্রেয়, কারণ কোয়েরি স্ট্রিংগুলো সার্ভার লগে দৃশ্যমান হওয়ার প্রবণতা থাকে। বেশিরভাগ ক্ষেত্রে, আপনি Google API-তে আপনার কলগুলো সেট আপ করার জন্য একটি ক্লায়েন্ট লাইব্রেরি ব্যবহার করতে পারেন (উদাহরণস্বরূপ, Drive Files API-তে কল করার সময়)।
আপনি OAuth 2.0 প্লেগ্রাউন্ডে সমস্ত গুগল এপিআই ব্যবহার করে দেখতে এবং সেগুলোর পরিধি দেখতে পারেন।
HTTP GET উদাহরণ
Authorization: Bearer HTTP হেডার ব্যবহার করে drive.files এন্ডপয়েন্টে (ড্রাইভ ফাইলস এপিআই) একটি কল নিম্নলিখিতের মতো দেখতে হতে পারে। মনে রাখবেন যে আপনাকে আপনার নিজস্ব অ্যাক্সেস টোকেন নির্দিষ্ট করতে হবে:
GET /drive/v2/files HTTP/1.1 Host: www.googleapis.com Authorization: Bearer access_token
access_token কোয়েরি স্ট্রিং প্যারামিটার ব্যবহার করে প্রমাণীকৃত ব্যবহারকারীর জন্য একই API-তে একটি কল নিচে দেওয়া হলো:
GET https://www.googleapis.com/drive/v2/files?access_token=access_token
curl উদাহরণ
আপনি curl কমান্ড-লাইন অ্যাপ্লিকেশন দিয়ে এই কমান্ডগুলো পরীক্ষা করতে পারেন। এখানে একটি উদাহরণ দেওয়া হলো যেখানে HTTP হেডার অপশন (পছন্দনীয়) ব্যবহার করা হয়েছে:
curl -H "Authorization: Bearer access_token" https://www.googleapis.com/drive/v2/files
অথবা, বিকল্পভাবে, কোয়েরি স্ট্রিং প্যারামিটার বিকল্পটি:
curl https://www.googleapis.com/drive/v2/files?access_token=access_token
যখন অ্যাক্সেস টোকেনের মেয়াদ শেষ হয়ে যায়
Google OAuth 2.0 Authorization Server দ্বারা ইস্যু করা অ্যাক্সেস টোকেনগুলো expires_in ভ্যালুতে দেওয়া সময়কাল শেষে মেয়াদোত্তীর্ণ হয়ে যায়। যখন কোনো অ্যাক্সেস টোকেনের মেয়াদ শেষ হয়ে যায়, তখন অ্যাপ্লিকেশনটির উচিত আরেকটি JWT তৈরি করে, তাতে স্বাক্ষর করে, এবং আরেকটি অ্যাক্সেস টোকেনের জন্য অনুরোধ করা।
JWT ত্রুটি কোড
error ক্ষেত্র | error_description ক্ষেত্র | অর্থ | কীভাবে সমাধান করবেন |
|---|---|---|---|
unauthorized_client | Unauthorized client or scope in request. | আপনি যদি ডোমেন-ব্যাপী ডেলিগেশন ব্যবহার করার চেষ্টা করেন, তাহলে ব্যবহারকারীর ডোমেনের অ্যাডমিন কনসোলে সার্ভিস অ্যাকাউন্টটি অনুমোদিত নয়। | নিশ্চিত করুন যে, অ্যাডমিন কনসোলের ডোমেন-ব্যাপী ডেলিগেশন পৃষ্ঠায় যদিও এতে সাধারণত কয়েক মিনিট সময় লাগে, আপনার গুগল অ্যাকাউন্টের সকল ব্যবহারকারীর কাছে অনুমোদনটি পৌঁছাতে ২৪ ঘণ্টা পর্যন্ত সময় লাগতে পারে। |
unauthorized_client | Client is unauthorized to retrieve access tokens using this method, or client not authorized for any of the scopes requested. | অ্যাডমিন কনসোলে ক্লায়েন্ট আইডি (সংখ্যাসূচক)-এর পরিবর্তে ক্লায়েন্টের ইমেল ঠিকানা ব্যবহার করে একটি পরিষেবা অ্যাকাউন্ট অনুমোদিত করা হয়েছিল, অথবা অনুমোদনের জন্য একটি গুগল গ্রুপ ব্যবহার করা হয়েছিল। | অ্যাডমিন কনসোলের ডোমেন-ব্যাপী ডেলিগেশন পৃষ্ঠা থেকে ক্লায়েন্টটিকে সরিয়ে দিন এবং সংখ্যাসূচক আইডি দিয়ে পুনরায় যুক্ত করুন, অথবা গুগল গ্রুপটি সরিয়ে তার পরিবর্তে স্বতন্ত্র পরিষেবা বা ব্যবহারকারী অ্যাকাউন্টটি যুক্ত করুন। |
access_denied | (যেকোনো মান) | আপনি যদি ডোমেন-ব্যাপী ডেলিগেশন ব্যবহার করেন, তাহলে অ্যাডমিন কনসোলে এক বা একাধিক অনুরোধকৃত স্কোপ অনুমোদিত হচ্ছে না। | নিশ্চিত করুন যে, অ্যাডমিন কনসোলের ডোমেন-ব্যাপী ডেলিগেশন পৃষ্ঠায় 'যেসব পরিষেবা স্বতন্ত্রভাবে নিয়ন্ত্রিত নয় সেগুলিতে অ্যাক্সেস পরিচালনা করুন' পর্যালোচনা করে নিশ্চিত করুন যে Google পরিষেবাগুলিতে অ্যাক্সেস সীমাবদ্ধ নয়। যদিও এতে সাধারণত কয়েক মিনিট সময় লাগে, আপনার গুগল অ্যাকাউন্টের সকল ব্যবহারকারীর কাছে অনুমোদনটি পৌঁছাতে ২৪ ঘণ্টা পর্যন্ত সময় লাগতে পারে। |
admin_policy_enforced | (যেকোনো মান) | গুগল ওয়ার্কস্পেস অ্যাডমিনিস্ট্রেটরের নীতিমালার কারণে গুগল অ্যাকাউন্টটি অনুরোধকৃত এক বা একাধিক স্কোপ অনুমোদন করতে পারছে না। | আপনার OAuth ক্লায়েন্ট আইডিতে স্পষ্টভাবে অ্যাক্সেস মঞ্জুর না করা পর্যন্ত একজন প্রশাসক কীভাবে সমস্ত স্কোপ বা সংবেদনশীল এবং সীমাবদ্ধ স্কোপগুলিতে অ্যাক্সেস সীমাবদ্ধ করতে পারেন, সে সম্পর্কে আরও তথ্যের জন্য "কোন তৃতীয়-পক্ষ এবং অভ্যন্তরীণ অ্যাপগুলি Google Workspace ডেটা অ্যাক্সেস করবে তা নিয়ন্ত্রণ করুন" শীর্ষক Google Workspace অ্যাডমিন সহায়তা নিবন্ধটি দেখুন। |
invalid_client | (যেকোনো মান) | OAuth ক্লায়েন্ট অথবা JWT টোকেনটি অবৈধ বা ভুলভাবে কনফিগার করা হয়েছে। বিস্তারিত জানতে ত্রুটির বিবরণ দেখুন। | নিশ্চিত করুন যে JWT টোকেনটি বৈধ এবং এতে সঠিক ক্লেইম রয়েছে। OAuth ক্লায়েন্ট এবং পরিষেবা অ্যাকাউন্ট সঠিকভাবে কনফিগার করা আছে কিনা এবং আপনি সঠিক ইমেল ঠিকানা ব্যবহার করছেন কিনা তা যাচাই করুন। যাচাই করুন যে JWT টোকেনটি সঠিক এবং অনুরোধে উল্লিখিত ক্লায়েন্ট আইডির জন্যই ইস্যু করা হয়েছে। |
deleted_client | (যেকোনো মান) | অনুরোধটি করার জন্য ব্যবহৃত OAuth ক্লায়েন্টটি মুছে ফেলা হয়েছে। অব্যবহৃত ক্লায়েন্টের ক্ষেত্রে, এই মুছে ফেলার কাজটি ম্যানুয়ালি বা স্বয়ংক্রিয়ভাবে হতে পারে। মুছে ফেলার ৩০ দিনের মধ্যে ক্লায়েন্ট পুনরুদ্ধার করা যেতে পারে। আরও জানুন । | এমন একটি ক্লায়েন্ট আইডি ব্যবহার করুন যা এখনও সক্রিয় আছে। |
invalid_grant | Not a valid email অথবা Invalid email or User ID. | ব্যবহারকারীটির অস্তিত্ব নেই। | sub ক্লেইম (ফিল্ড)-এ দেওয়া ইমেল ঠিকানাটি সঠিক কিনা তা যাচাই করুন। |
invalid_grant | | সাধারণত, এর মানে হলো স্থানীয় সিস্টেমের সময় সঠিক নয়। এটি তখনো হতে পারে যখন exp মানটি iat মানের থেকে ৬৫ মিনিটের বেশি ভবিষ্যতের হয়, অথবা exp মানটি iat মানের চেয়ে কম হয়। | যে সিস্টেমে JWT তৈরি করা হচ্ছে, সেটির ঘড়ি সঠিক আছে কিনা তা নিশ্চিত করুন। প্রয়োজনে, Google NTP-এর সাথে আপনার সময় সিঙ্ক করুন। |
invalid_grant | Invalid JWT Signature. | JWT অ্যাসারশনটি এমন একটি প্রাইভেট কী দিয়ে স্বাক্ষরিত যা ক্লায়েন্ট ইমেল দ্বারা চিহ্নিত পরিষেবা অ্যাকাউন্টের সাথে যুক্ত নয়, অথবা ব্যবহৃত কী-টি মুছে ফেলা হয়েছে, নিষ্ক্রিয় করা হয়েছে বা মেয়াদ উত্তীর্ণ হয়ে গেছে। বিকল্পভাবে, JWT অ্যাসারশনটি ভুলভাবে এনকোড করা হয়ে থাকতে পারে — এটিকে অবশ্যই নিউলাইন বা সমান চিহ্নের প্যাডিং ছাড়া Base64-এ এনকোড করতে হবে। | JWT ক্লেইম সেটটি ডিকোড করুন এবং যাচাই করুন যে অ্যাসারশনটিতে স্বাক্ষরকারী কী-টি সার্ভিস অ্যাকাউন্টের সাথে যুক্ত আছে। JWT সঠিকভাবে তৈরি হচ্ছে কিনা তা নিশ্চিত করতে গুগল-প্রদত্ত OAuth লাইব্রেরি ব্যবহার করার চেষ্টা করুন। |
invalid_scope | Invalid OAuth scope or ID token audience provided. | কোনো স্কোপের জন্য অনুরোধ করা হয়নি (স্কোপের তালিকাটি খালি), অথবা অনুরোধ করা স্কোপগুলোর মধ্যে একটির অস্তিত্ব নেই (অর্থাৎ, এটি অবৈধ)। | নিশ্চিত করুন যে JWT-এর মনে রাখবেন যে, |
disabled_client | The OAuth client was disabled. | JWT অ্যাসারশন স্বাক্ষর করতে ব্যবহৃত কী-টি নিষ্ক্রিয় করা হয়েছে। | Google API কনসোলে যান এবং IAM & Admin > Service Accounts-এর অধীনে, অ্যাসারশনটি স্বাক্ষর করতে ব্যবহৃত "Key ID" ধারণকারী সার্ভিস অ্যাকাউন্টটি সক্রিয় করুন। |
org_internal | This client is restricted to users within its organization. | অনুরোধে থাকা OAuth ক্লায়েন্ট আইডিটি একটি প্রকল্পের অংশ, যা একটি নির্দিষ্ট গুগল ক্লাউড অর্গানাইজেশনের গুগল অ্যাকাউন্টগুলিতে অ্যাক্সেস সীমিত করে। | প্রমাণীকরণের জন্য প্রতিষ্ঠানের একটি সার্ভিস অ্যাকাউন্ট ব্যবহার করুন। আপনার OAuth অ্যাপ্লিকেশনের জন্য ব্যবহারকারীর প্রকারের কনফিগারেশন নিশ্চিত করুন। |
সংযোজন: OAuth ছাড়া পরিষেবা অ্যাকাউন্টের অনুমোদন
কিছু গুগল এপিআই-এর ক্ষেত্রে, আপনি OAuth 2.0 অ্যাক্সেস টোকেনের পরিবর্তে সরাসরি একটি স্বাক্ষরিত JWT-কে বেয়ারার টোকেন হিসেবে ব্যবহার করে অনুমোদিত এপিআই কল করতে পারেন। যখন এটি সম্ভব হয়, তখন এপিআই কল করার আগে গুগলের অনুমোদন সার্ভারে নেটওয়ার্ক অনুরোধ পাঠানোর প্রয়োজন এড়ানো যায়।
আপনি যে API-টি কল করতে চান, সেটির সার্ভিস ডেফিনিশন যদি Google APIs GitHub রিপোজিটরিতে প্রকাশিত থাকে, তাহলে আপনি অ্যাক্সেস টোকেনের পরিবর্তে JWT ব্যবহার করে অনুমোদিত API কল করতে পারেন। এটি করতে:
- একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন । অ্যাকাউন্ট তৈরি করার সময় প্রাপ্ত JSON ফাইলটি অবশ্যই সংরক্ষণ করুন।
- 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ফিল্ডের জন্য বর্তমান ইউনিক্স ইপক টাইম উল্লেখ করুন এবংexpফিল্ডের জন্য ঠিক ৩৬০০ সেকেন্ড পরের সময়টি উল্লেখ করুন, যখন 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')
- স্বাক্ষরিত JWT-টিকে বেয়ারার টোকেন হিসেবে ব্যবহার করে API-টিকে কল করুন:
GET /v1/projects/abc/databases/123/indexes HTTP/1.1 Authorization: Bearer SIGNED_JWT Host: firestore.googleapis.com
ক্রস-অ্যাকাউন্ট সুরক্ষা বাস্তবায়ন করুন
আপনার ব্যবহারকারীদের অ্যাকাউন্ট সুরক্ষিত রাখার জন্য আরেকটি অতিরিক্ত পদক্ষেপ হলো গুগলের ক্রস-অ্যাকাউন্ট প্রোটেকশন সার্ভিস ব্যবহার করে ক্রস-অ্যাকাউন্ট প্রোটেকশন প্রয়োগ করা। এই পরিষেবাটি আপনাকে নিরাপত্তা ইভেন্টের নোটিফিকেশনের জন্য সাবস্ক্রাইব করার সুযোগ দেয়, যা ব্যবহারকারীর অ্যাকাউন্টের বড় ধরনের পরিবর্তন সম্পর্কে আপনার অ্যাপ্লিকেশনকে তথ্য সরবরাহ করে। এরপর, ইভেন্টগুলোতে আপনি কীভাবে সাড়া দেবেন সেই সিদ্ধান্ত অনুযায়ী ব্যবস্থা নিতে আপনি এই তথ্য ব্যবহার করতে পারেন।
গুগলের ক্রস-অ্যাকাউন্ট প্রোটেকশন সার্ভিস দ্বারা আপনার অ্যাপে পাঠানো ইভেন্ট টাইপগুলোর কিছু উদাহরণ হলো:
-
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
ক্রস অ্যাকাউন্ট প্রোটেকশন কীভাবে প্রয়োগ করতে হয় সে সম্পর্কে আরও তথ্যের জন্য এবং উপলব্ধ ইভেন্টগুলির সম্পূর্ণ তালিকার জন্য ‘ক্রস-অ্যাকাউন্ট প্রোটেকশনের মাধ্যমে ব্যবহারকারীর অ্যাকাউন্ট সুরক্ষিত করুন’ পৃষ্ঠাটি দেখুন।