যদি আপনার Firebase ক্লায়েন্ট অ্যাপটি একটি কাস্টম ব্যাকএন্ড সার্ভারের সাথে যোগাযোগ করে, তাহলে আপনাকে সেই সার্ভারে বর্তমানে সাইন-ইন করা ব্যবহারকারীকে সনাক্ত করতে হতে পারে। নিরাপদে এটি করার জন্য, সফল সাইন-ইনের পরে, HTTPS ব্যবহার করে ব্যবহারকারীর ID টোকেনটি আপনার সার্ভারে পাঠান। তারপর, সার্ভারে, ID টোকেনের অখণ্ডতা এবং সত্যতা যাচাই করুন এবং এটি থেকে uid পুনরুদ্ধার করুন। আপনি আপনার সার্ভারে বর্তমানে সাইন-ইন করা ব্যবহারকারীকে নিরাপদে সনাক্ত করতে এইভাবে প্রেরিত uid ব্যবহার করতে পারেন।
শুরু করার আগে
Firebase Admin SDK দিয়ে ID টোকেন যাচাই করতে, আপনার একটি পরিষেবা অ্যাকাউন্ট থাকতে হবে। পরিষেবা অ্যাকাউন্ট দিয়ে Admin SDK কীভাবে শুরু করবেন সে সম্পর্কে আরও তথ্যের জন্য Admin SDK সেটআপ নির্দেশাবলী অনুসরণ করুন।
ক্লায়েন্টদের আইডি টোকেন পুনরুদ্ধার করুন
যখন কোনও ব্যবহারকারী বা ডিভাইস সফলভাবে সাইন ইন করে, তখন Firebase একটি সংশ্লিষ্ট আইডি টোকেন তৈরি করে যা তাদের অনন্যভাবে সনাক্ত করে এবং তাদের Firebase Realtime Database এবং Cloud Storage মতো বিভিন্ন সংস্থানগুলিতে অ্যাক্সেস দেয়। আপনি আপনার কাস্টম ব্যাকএন্ড সার্ভারে ব্যবহারকারী বা ডিভাইস সনাক্ত করতে সেই আইডি টোকেনটি পুনরায় ব্যবহার করতে পারেন। ক্লায়েন্ট থেকে আইডি টোকেনটি পুনরুদ্ধার করতে, নিশ্চিত করুন যে ব্যবহারকারী সাইন ইন করেছেন এবং তারপরে সাইন-ইন করা ব্যবহারকারীর কাছ থেকে আইডি টোকেনটি পান:
আইওএস+
অবজেক্টিভ-সি
FIRUser *currentUser = [FIRAuth auth].currentUser;
[currentUser getIDTokenForcingRefresh:YES
completion:^(NSString *_Nullable idToken,
NSError *_Nullable error) {
if (error) {
// Handle error
return;
}
// Send token to your backend via HTTPS
// ...
}];
সুইফট
let currentUser = FIRAuth.auth()?.currentUser
currentUser?.getIDTokenForcingRefresh(true) { idToken, error in
if let error = error {
// Handle error
return;
}
// Send token to your backend via HTTPS
// ...
}
অ্যান্ড্রয়েড
FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
mUser.getIdToken(true)
.addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
public void onComplete(@NonNull Task<GetTokenResult> task) {
if (task.isSuccessful()) {
String idToken = task.getResult().getToken();
// Send token to your backend via HTTPS
// ...
} else {
// Handle error -> task.getException();
}
}
});
ঐক্য
Firebase.Auth.FirebaseUser user = auth.CurrentUser;
user.TokenAsync(true).ContinueWith(task => {
if (task.IsCanceled) {
Debug.LogError("TokenAsync was canceled.");
return;
}
if (task.IsFaulted) {
Debug.LogError("TokenAsync encountered an error: " + task.Exception);
return;
}
string idToken = task.Result;
// Send token to your backend via HTTPS
// ...
});
সি++
firebase::auth::User user = auth->current_user();
if (user.is_valid()) {
firebase::Future<std::string> idToken = user.GetToken(true);
// Send token to your backend via HTTPS
// ...
}
ওয়েব
firebase.auth().currentUser.getIdToken(/* forceRefresh */ true).then(function(idToken) {
// Send token to your backend via HTTPS
// ...
}).catch(function(error) {
// Handle error
});
একবার আপনার কাছে একটি আইডি টোকেন হয়ে গেলে, আপনি সেই JSON ওয়েব টোকেন (JWT) আপনার ব্যাকএন্ডে পাঠাতে পারেন এবং Firebase Admin SDK ব্যবহার করে এটি যাচাই করতে পারেন, অথবা যদি আপনার সার্ভারটি এমন কোনও ভাষায় লেখা হয় যা Firebase স্থানীয়ভাবে সমর্থন করে না, তাহলে একটি তৃতীয় পক্ষের JWT লাইব্রেরি ব্যবহার করে।
Firebase Admin SDK ব্যবহার করে আইডি টোকেন যাচাই করুন
Firebase Admin SDK-তে ID টোকেন যাচাই এবং ডিকোড করার জন্য একটি অন্তর্নির্মিত পদ্ধতি রয়েছে। যদি প্রদত্ত ID টোকেনটি সঠিক ফর্ম্যাটে থাকে, মেয়াদোত্তীর্ণ না হয় এবং সঠিকভাবে স্বাক্ষরিত হয়, তাহলে পদ্ধতিটি ডিকোড করা ID টোকেনটি ফেরত দেয়। আপনি ডিকোড করা টোকেন থেকে ব্যবহারকারী বা ডিভাইসের uid পেতে পারেন।
একটি পরিষেবা অ্যাকাউন্ট দিয়ে অ্যাডমিন SDK শুরু করতে অ্যাডমিন SDK সেটআপ নির্দেশাবলী অনুসরণ করুন। তারপর, একটি আইডি টোকেন যাচাই করতে verifyIdToken() পদ্ধতি ব্যবহার করুন:
নোড.জেএস
// idToken comes from the client app
getAuth()
.verifyIdToken(idToken)
.then((decodedToken) => {
const uid = decodedToken.uid;
// ...
})
.catch((error) => {
// Handle error
});
জাভা
// idToken comes from the client app (shown above)
FirebaseToken decodedToken = FirebaseAuth.getInstance().verifyIdToken(idToken);
String uid = decodedToken.getUid();
পাইথন
# id_token comes from the client app (shown above)
decoded_token = auth.verify_id_token(id_token)
uid = decoded_token['uid']
যাও
client, err := app.Auth(ctx)
if err != nil {
log.Fatalf("error getting Auth client: %v\n", err)
}
token, err := client.VerifyIDToken(ctx, idToken)
if err != nil {
log.Fatalf("error verifying ID token: %v\n", err)
}
log.Printf("Verified ID token: %v\n", token)
সি#
FirebaseToken decodedToken = await FirebaseAuth.DefaultInstance
.VerifyIdTokenAsync(idToken);
string uid = decodedToken.Uid;
আইডি টোকেন যাচাইকরণের জন্য একটি প্রকল্প আইডি প্রয়োজন। ফায়ারবেস অ্যাডমিন SDK নিম্নলিখিত পদ্ধতিগুলির মধ্যে একটির মাধ্যমে একটি প্রকল্প আইডি পাওয়ার চেষ্টা করে:
- যদি SDK একটি স্পষ্ট
projectIdঅ্যাপ বিকল্প দিয়ে শুরু করা হয়, তাহলে SDK সেই বিকল্পের মান ব্যবহার করে। - যদি SDK পরিষেবা অ্যাকাউন্ট শংসাপত্র দিয়ে শুরু করা হয়, তাহলে SDK পরিষেবা অ্যাকাউন্ট JSON অবজেক্টের
project_idক্ষেত্রটি ব্যবহার করে। - যদি
GOOGLE_CLOUD_PROJECTএনভায়রনমেন্ট ভ্যারিয়েবল সেট করা থাকে, তাহলে SDK এর মানটি প্রজেক্ট আইডি হিসেবে ব্যবহার করে। এই এনভায়রনমেন্ট ভ্যারিয়েবলটি App Engine এবং Compute Engine মতো গুগল অবকাঠামোতে চলমান কোডের জন্য উপলব্ধ।
তৃতীয় পক্ষের JWT লাইব্রেরি ব্যবহার করে আইডি টোকেন যাচাই করুন
যদি আপনার ব্যাকএন্ড এমন কোনও ভাষায় হয় যা Firebase Admin SDK দ্বারা সমর্থিত নয়, তবুও আপনি ID টোকেন যাচাই করতে পারেন। প্রথমে, আপনার ভাষার জন্য একটি তৃতীয় পক্ষের JWT লাইব্রেরি খুঁজুন । তারপর, ID টোকেনের হেডার, পেলোড এবং স্বাক্ষর যাচাই করুন।
আইডি টোকেনের হেডারটি নিম্নলিখিত সীমাবদ্ধতাগুলি মেনে চলে কিনা তা যাচাই করুন:
| আইডি টোকেন হেডার দাবি | ||
|---|---|---|
alg | অ্যালগরিদম | "RS256" |
kid | কী আইডি | https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com এ তালিকাভুক্ত যেকোনো একটি পাবলিক কী-এর সাথে সঙ্গতিপূর্ণ হতে হবে |
আইডি টোকেনের পেলোড নিম্নলিখিত সীমাবদ্ধতাগুলি মেনে চলে কিনা তা যাচাই করুন:
| আইডি টোকেন পেলোড দাবি | ||
|---|---|---|
exp | মেয়াদ শেষ হওয়ার সময় | ভবিষ্যতের হতে হবে। UNIX যুগের পর থেকে সময় সেকেন্ডে পরিমাপ করা হয়। |
iat | ইস্যুকৃত সময় | অতীতে হতে হবে। UNIX যুগের পর থেকে সময় সেকেন্ডে পরিমাপ করা হয়। |
aud | পাঠকবর্গ | আপনার Firebase প্রজেক্ট আইডি হতে হবে, যা আপনার Firebase প্রজেক্টের অনন্য শনাক্তকারী, যা সেই প্রজেক্টের কনসোলের URL-এ পাওয়া যাবে। |
iss | ইস্যুকারী | "https://securetoken.google.com/<projectId>" হতে হবে, যেখানে <projectId> হল উপরে বর্ণিত aud জন্য ব্যবহৃত একই প্রজেক্ট আইডি। |
sub | বিষয় | অবশ্যই একটি খালি স্ট্রিং হতে হবে এবং ব্যবহারকারী বা ডিভাইসের uid হতে হবে। |
auth_time | প্রমাণীকরণের সময় | অতীতের হতে হবে। ব্যবহারকারী যখন প্রমাণীকরণ করেছিলেন সেই সময়। |
অবশেষে, নিশ্চিত করুন যে আইডি টোকেনটি টোকেনের kid দাবির সাথে সম্পর্কিত প্রাইভেট কী দ্বারা স্বাক্ষরিত হয়েছে। https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com থেকে পাবলিক কীটি নিন এবং স্বাক্ষর যাচাই করার জন্য একটি JWT লাইব্রেরি ব্যবহার করুন। পাবলিক কীগুলি কখন রিফ্রেশ করতে হবে তা জানতে সেই এন্ডপয়েন্ট থেকে প্রতিক্রিয়ার Cache-Control হেডারে max-age মান ব্যবহার করুন।
উপরের সমস্ত যাচাইকরণ সফল হলে, আপনি সংশ্লিষ্ট ব্যবহারকারী বা ডিভাইসের uid হিসাবে আইডি টোকেনের বিষয় ( sub ) ব্যবহার করতে পারেন।