ফায়ারবেস এসডিকে-গুলো আপনার পক্ষ থেকে Firebase Realtime Database সাথে সমস্ত প্রমাণীকরণ এবং যোগাযোগ পরিচালনা করে। তবে, যখন আপনি এমন কোনো পরিবেশে থাকেন যেখানে কোনো ক্লায়েন্ট এসডিকে নেই অথবা আপনি একটি স্থায়ী ডেটাবেস সংযোগের অতিরিক্ত ঝামেলা এড়াতে চান, তখন আপনি ডেটা পড়া এবং লেখার জন্য Realtime Database REST API ব্যবহার করতে পারেন।
নিম্নলিখিত পদ্ধতিগুলোর যেকোনো একটির মাধ্যমে ব্যবহারকারীদের প্রমাণীকরণ করুন:
গুগল OAuth2 অ্যাক্সেস টোকেন - সাধারণত, Realtime Database থেকে ডেটা পড়া এবং তাতে লেখার ক্ষমতা Realtime Database রুলস দ্বারা নিয়ন্ত্রিত হয়। কিন্তু, আপনি একটি সার্ভিস অ্যাকাউন্ট থেকে তৈরি করা গুগল OAuth2 অ্যাক্সেস টোকেন ব্যবহার করে কোনো সার্ভার থেকে আপনার ডেটা অ্যাক্সেস করতে পারেন এবং সেই সার্ভারকে আপনার ডেটাতে সম্পূর্ণ রিড ও রাইট অ্যাক্সেস প্রদান করতে পারেন।
ফায়ারবেস আইডি টোকেন - আপনি একজন স্বতন্ত্র ব্যবহারকারী হিসাবে প্রমাণীকৃত অনুরোধও পাঠাতে চাইতে পারেন, যেমন ক্লায়েন্ট SDK-গুলিতে Realtime Database রুলস ব্যবহার করে অ্যাক্সেস সীমিত করা। REST API ক্লায়েন্ট SDK-গুলিতে ব্যবহৃত একই ফায়ারবেস আইডি টোকেন গ্রহণ করে।
গুগল OAuth2 অ্যাক্সেস টোকেন
আপনার Realtime Database নিয়ম অনুসারে যে কোনো ডেটা যা সর্বজনীনভাবে পঠনযোগ্য বা লিখনযোগ্য, তা কোনো প্রমাণীকরণ ছাড়াই REST API-এর মাধ্যমেও পঠন ও লিখনযোগ্য। তবে, আপনি যদি চান আপনার সার্ভার আপনার Realtime Database নিয়মগুলিকে বাইপাস করুক, তাহলে আপনাকে আপনার পঠন এবং লিখন অনুরোধগুলিকে প্রমাণীকরণ করতে হবে। Google OAuth2-এর মাধ্যমে প্রমাণীকরণের জন্য নিম্নলিখিত পদক্ষেপগুলি প্রয়োজন:
- একটি অ্যাক্সেস টোকেন তৈরি করুন।
- ঐ অ্যাক্সেস টোকেন দিয়ে প্রমাণীকরণ করুন।
একটি অ্যাক্সেস টোকেন তৈরি করুন
Realtime Database REST API স্ট্যান্ডার্ড গুগল OAuth2 অ্যাক্সেস টোকেন গ্রহণ করে। আপনার Realtime Database যথাযথ অনুমতিসহ একটি সার্ভিস অ্যাকাউন্ট ব্যবহার করে এই অ্যাক্সেস টোকেনগুলো তৈরি করা যায়। আপনার কাছে যদি আগে থেকে কোনো সার্ভিস অ্যাকাউন্ট কী ফাইল না থাকে, তবে Firebase কনসোলের ' সার্ভিস অ্যাকাউন্টস' বিভাগের নীচে থাকা 'জেনারেট নিউ প্রাইভেট কী' বোতামে ক্লিক করে আপনি সহজেই একটি নতুন সার্ভিস অ্যাকাউন্ট কী ফাইল তৈরি করতে পারবেন।
আপনার কাছে একটি সার্ভিস অ্যাকাউন্ট কী ফাইল থাকলে, আপনি গুগল এপিআই ক্লায়েন্ট লাইব্রেরিগুলোর মধ্যে একটি ব্যবহার করে নিম্নলিখিত প্রয়োজনীয় স্কোপগুলো সহ একটি গুগল OAuth2 অ্যাক্সেস টোকেন তৈরি করতে পারবেন:
-
https://www.googleapis.com/auth/userinfo.email -
https://www.googleapis.com/auth/firebase.database
এখানে কিছু উদাহরণ দেওয়া হলো, যা দেখায় কীভাবে বিভিন্ন ভাষায় Realtime Database REST API-তে প্রমাণীকরণের জন্য Google OAuth2 অ্যাক্সেস টোকেন তৈরি করতে হয়:
নোড.জেএস
Node.js-এর জন্য গুগল এপিআই ক্লায়েন্ট লাইব্রেরি ব্যবহার করা:
var {google} = require("googleapis");
// Load the service account key JSON file.
var serviceAccount = require("path/to/serviceAccountKey.json");
// Define the required scopes.
var scopes = [
"https://www.googleapis.com/auth/userinfo.email",
"https://www.googleapis.com/auth/firebase.database"
];
// Authenticate a JWT client with the service account.
var jwtClient = new google.auth.JWT(
serviceAccount.client_email,
null,
serviceAccount.private_key,
scopes
);
// Use the JWT client to generate an access token.
jwtClient.authorize(function(error, tokens) {
if (error) {
console.log("Error making request to generate access token:", error);
} else if (tokens.access_token === null) {
console.log("Provided service account does not have permission to generate access tokens");
} else {
var accessToken = tokens.access_token;
// See the "Using the access token" section below for information
// on how to use the access token to send authenticated requests to
// the Realtime Database REST API.
}
});
জাভা
জাভার জন্য গুগল এপিআই ক্লায়েন্ট লাইব্রেরি ব্যবহার করা:
// Load the service account key JSON file
FileInputStream serviceAccount = new FileInputStream("path/to/serviceAccountKey.json");
// Authenticate a Google credential with the service account
GoogleCredential googleCred = GoogleCredential.fromStream(serviceAccount);
// Add the required scopes to the Google credential
GoogleCredential scoped = googleCred.createScoped(
Arrays.asList(
"https://www.googleapis.com/auth/firebase.database",
"https://www.googleapis.com/auth/userinfo.email"
)
);
// Use the Google credential to generate an access token
scoped.refreshToken();
String token = scoped.getAccessToken();
// See the "Using the access token" section below for information
// on how to use the access token to send authenticated requests to the
// Realtime Database REST API.
পাইথন
google-auth লাইব্রেরি ব্যবহার করে:
from google.oauth2 import service_account
from google.auth.transport.requests import AuthorizedSession
# Define the required scopes
scopes = [
"https://www.googleapis.com/auth/userinfo.email",
"https://www.googleapis.com/auth/firebase.database"
]
# Authenticate a credential with the service account
credentials = service_account.Credentials.from_service_account_file(
"path/to/serviceAccountKey.json", scopes=scopes)
# Use the credentials object to authenticate a Requests session.
authed_session = AuthorizedSession(credentials)
response = authed_session.get(
"https://<DATABASE_NAME>.firebaseio.com/users/ada/name.json")
# Or, use the token directly, as described in the "Authenticate with an
# access token" section below. (not recommended)
request = google.auth.transport.requests.Request()
credentials.refresh(request)
access_token = credentials.token
অ্যাক্সেস টোকেন দিয়ে প্রমাণীকরণ করুন
Realtime Database REST API-তে প্রমাণীকৃত অনুরোধ পাঠাতে, উপরে তৈরি করা Google OAuth2 অ্যাক্সেস টোকেনটি Authorization: Bearer <ACCESS_TOKEN> হেডার হিসেবে অথবা access_token=<ACCESS_TOKEN> কোয়েরি স্ট্রিং প্যারামিটার হিসেবে পাস করুন। অ্যাডার নাম পড়ার জন্য এখানে একটি curl অনুরোধের উদাহরণ দেওয়া হলো:
curl "https://<DATABASE_NAME>.firebaseio.com/users/ada/name.json?access_token=<ACCESS_TOKEN>"
<DATABASE_NAME> জায়গায় আপনার Realtime Database নাম এবং <ACCESS_TOKEN> এর জায়গায় একটি গুগল OAuth2 অ্যাক্সেস টোকেন বসাতে ভুলবেন না।
একটি সফল অনুরোধ 200 OK HTTP স্ট্যাটাস কোড দ্বারা নির্দেশিত হবে। প্রতিক্রিয়াটিতে পুনরুদ্ধার করা ডেটা থাকে:
{"first":"Ada","last":"Lovelace"}
ফায়ারবেস আইডি টোকেন
যখন কোনো ব্যবহারকারী বা ডিভাইস Firebase Authentication ব্যবহার করে সাইন ইন করে, তখন Firebase একটি সংশ্লিষ্ট আইডি টোকেন তৈরি করে যা তাদেরকে অনন্যভাবে শনাক্ত করে এবং Realtime Database ও Cloud Storage মতো বিভিন্ন রিসোর্সে অ্যাক্সেস প্রদান করে। আপনি সেই আইডি টোকেনটি পুনরায় ব্যবহার করে Realtime Database REST API-কে প্রমাণীকরণ করতে এবং সেই ব্যবহারকারীর পক্ষ থেকে অনুরোধ পাঠাতে পারেন।
একটি আইডি টোকেন তৈরি করুন
ক্লায়েন্ট থেকে Firebase ID টোকেন পুনরুদ্ধার করতে, "ক্লায়েন্টগুলিতে ID টোকেন পুনরুদ্ধার করুন" অংশে বর্ণিত ধাপগুলি অনুসরণ করুন।
মনে রাখবেন যে, আইডি টোকেনগুলো অল্প সময়ের মধ্যেই মেয়াদোত্তীর্ণ হয়ে যায়, তাই সেগুলো পাওয়ার পর যত দ্রুত সম্ভব ব্যবহার করা উচিত।
একটি আইডি টোকেন দিয়ে প্রমাণীকরণ করুন
Realtime Database REST API-তে প্রমাণীকৃত অনুরোধ পাঠাতে, উপরে তৈরি করা ID টোকেনটি auth=<ID_TOKEN> কোয়েরি স্ট্রিং প্যারামিটার হিসেবে পাস করুন। নিচে অ্যাডার নাম পড়ার জন্য একটি curl অনুরোধের উদাহরণ দেওয়া হলো:
curl "https://<DATABASE_NAME>.firebaseio.com/users/ada/name.json?auth=<ID_TOKEN>"
<DATABASE_NAME> জায়গায় আপনার Realtime Database নাম এবং <ID_TOKEN> এর জায়গায় একটি ফায়ারবেস আইডি টোকেন বসাতে ভুলবেন না।
একটি সফল অনুরোধ 200 OK HTTP স্ট্যাটাস কোড দ্বারা নির্দেশিত হবে। প্রতিক্রিয়াটিতে পুনরুদ্ধার করা ডেটা থাকে:
{"first":"Ada","last":"Lovelace"}
লিগ্যাসি টোকেন
আপনি যদি এখনও পুরোনো Firebase অথেনটিকেশন টোকেন ব্যবহার করে থাকেন, তাহলে আমরা আপনাকে উপরে বর্ণিত অথেনটিকেশন পদ্ধতিগুলোর মধ্যে যেকোনো একটিতে আপনার REST অথেনটিকেশন আপডেট করার পরামর্শ দিচ্ছি।
Realtime Database REST API এখনও লিগ্যাসি অথেন্টিকেশন টোকেন, যার মধ্যে সিক্রেটও অন্তর্ভুক্ত, এর মাধ্যমে অথেন্টিকেশন সমর্থন করে। আপনার Realtime Database সিক্রেটগুলো Firebase কনসোলের সার্ভিস অ্যাকাউন্টস বিভাগে পাওয়া যাবে।
সিক্রেট হলো দীর্ঘস্থায়ী ক্রেডেনশিয়াল। কোনো প্রজেক্ট থেকে সিক্রেট অ্যাক্সেস থাকা ব্যবহারকারীদের (যেমন মালিক) অপসারণ করার সময়, আমরা একটি নতুন সিক্রেট তৈরি করার এবং বিদ্যমানটি বাতিল করার পরামর্শ দিই।