আপনার ফায়ারবেস ক্লায়েন্ট অ্যাপ যদি কোনো কাস্টম ব্যাকএন্ড সার্ভারের সাথে যোগাযোগ করে, তাহলে সেই সার্ভারে বর্তমানে সাইন-ইন করা ব্যবহারকারীকে শনাক্ত করার প্রয়োজন হতে পারে। এটি নিরাপদে করার জন্য, সফলভাবে সাইন-ইন করার পর, HTTPS ব্যবহার করে ব্যবহারকারীর আইডি টোকেনটি আপনার সার্ভারে পাঠান। এরপর, সার্ভারে আইডি টোকেনটির অখণ্ডতা ও সত্যতা যাচাই করুন এবং সেখান থেকে uid সংগ্রহ করুন। এভাবে পাঠানো uid ব্যবহার করে আপনি আপনার সার্ভারে বর্তমানে সাইন-ইন করা ব্যবহারকারীকে নিরাপদে শনাক্ত করতে পারবেন।
শুরু করার আগে
Firebase Admin SDK দিয়ে আইডি টোকেন যাচাই করার জন্য আপনার একটি সার্ভিস অ্যাকাউন্ট থাকতে হবে। সার্ভিস অ্যাকাউন্ট দিয়ে কীভাবে Admin SDK চালু করতে হয়, সে সম্পর্কে আরও তথ্যের জন্য Admin SDK সেটআপ নির্দেশাবলী অনুসরণ করুন।
ক্লায়েন্টদের আইডি টোকেন পুনরুদ্ধার করুন
যখন কোনো ব্যবহারকারী বা ডিভাইস সফলভাবে সাইন ইন করে, তখন Firebase একটি সংশ্লিষ্ট আইডি টোকেন তৈরি করে যা তাদেরকে অনন্যভাবে শনাক্ত করে এবং Firebase Realtime Database ও Cloud Storage মতো বিভিন্ন রিসোর্সে অ্যাক্সেস প্রদান করে। আপনি আপনার কাস্টম ব্যাকএন্ড সার্ভারে ব্যবহারকারী বা ডিভাইসটিকে শনাক্ত করার জন্য সেই আইডি টোকেনটি পুনরায় ব্যবহার করতে পারেন। ক্লায়েন্ট থেকে আইডি টোকেনটি পুনরুদ্ধার করতে, নিশ্চিত করুন যে ব্যবহারকারী সাইন ইন করেছেন এবং তারপরে সাইন-ইন করা ব্যবহারকারীর কাছ থেকে আইডি টোকেনটি সংগ্রহ করুন:
iOS+
উদ্দেশ্য-সি
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 অ্যাডমিন SDK ব্যবহার করে সেটিকে ভ্যালিডেট করতে পারেন। অথবা, আপনার সার্ভারটি এমন কোনো ভাষায় লেখা হলে যা Firebase স্বাভাবিকভাবে সাপোর্ট করে না, সেক্ষেত্রে কোনো থার্ড-পার্টি JWT লাইব্রেরি ব্যবহার করতে পারেন।
Firebase Admin SDK ব্যবহার করে আইডি টোকেন যাচাই করুন
ফায়ারবেস অ্যাডমিন এসডিকে-তে আইডি টোকেন যাচাই এবং ডিকোড করার জন্য একটি বিল্ট-ইন মেথড রয়েছে। যদি প্রদত্ত আইডি টোকেনটির ফরম্যাট সঠিক হয়, মেয়াদ উত্তীর্ণ না হয় এবং যথাযথভাবে স্বাক্ষরিত হয়, তবে মেথডটি ডিকোড করা আইডি টোকেনটি রিটার্ন করে। আপনি ডিকোড করা টোকেন থেকে ব্যবহারকারী বা ডিভাইসের 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;
আইডি টোকেন যাচাই করার জন্য একটি প্রজেক্ট আইডি প্রয়োজন। Firebase Admin SDK নিম্নলিখিত পদ্ধতিগুলোর কোনো একটির মাধ্যমে প্রজেক্ট আইডি সংগ্রহ করার চেষ্টা করে:
- যদি SDK-টি একটি সুস্পষ্ট
projectIdapp অপশন দিয়ে ইনিশিয়ালাইজ করা হয়ে থাকে, তাহলে SDK সেই অপশনের মানটি ব্যবহার করে। - যদি সার্ভিস অ্যাকাউন্ট ক্রেডেনশিয়াল ব্যবহার করে SDK-টি ইনিশিয়ালাইজ করা হয়ে থাকে, তাহলে SDK-টি সার্ভিস অ্যাকাউন্ট JSON অবজেক্টের
project_idফিল্ডটি ব্যবহার করে। - যদি
GOOGLE_CLOUD_PROJECTএনভায়রনমেন্ট ভেরিয়েবলটি সেট করা থাকে, তাহলে SDK এর মানটিকে প্রজেক্ট আইডি হিসেবে ব্যবহার করে। এই এনভায়রনমেন্ট ভেরিয়েবলটি গুগলের পরিকাঠামো, যেমন App Engine এবং Compute Engine চলমান কোডের জন্য উপলব্ধ।
তৃতীয় পক্ষের JWT লাইব্রেরি ব্যবহার করে আইডি টোকেন যাচাই করুন
আপনার ব্যাকএন্ড যদি Firebase Admin SDK দ্বারা সমর্থিত নয় এমন কোনো ভাষায় তৈরি হয়, তাহলেও আপনি আইডি টোকেন যাচাই করতে পারবেন। প্রথমে, আপনার ভাষার জন্য একটি থার্ড-পার্টি JWT লাইব্রেরি খুঁজুন । তারপর, আইডি টোকেনটির হেডার, পেলোড এবং সিগনেচার যাচাই করুন।
আইডি টোকেনের হেডারটি নিম্নলিখিত শর্তাবলী মেনে চলে কিনা তা যাচাই করুন:
| আইডি টোকেন হেডার দাবি | ||
|---|---|---|
alg | অ্যালগরিদম | "RS256" |
kid | কী আইডি | https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com এ তালিকাভুক্ত পাবলিক কীগুলির মধ্যে একটির সাথে অবশ্যই মিলতে হবে। |
আইডি টোকেনের পেলোড নিম্নলিখিত শর্তাবলী মেনে চলে কিনা তা যাচাই করুন:
| আইডি টোকেন পেলোড দাবি | ||
|---|---|---|
exp | মেয়াদ শেষ হওয়ার সময় | অবশ্যই ভবিষ্যতের ঘটনা। ইউনিক্স যুগ থেকে সময় সেকেন্ডে মাপা হয়। |
iat | ইস্যু-সময় | অবশ্যই অতীতের ঘটনা। ইউনিক্স ইপোক থেকে সময় সেকেন্ডে মাপা হয়। |
aud | দর্শক | এটি অবশ্যই আপনার ফায়ারবেস প্রজেক্ট আইডি হতে হবে, যা আপনার ফায়ারবেস প্রজেক্টের অনন্য শনাক্তকারী এবং যা সেই প্রজেক্টের কনসোলের 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 এর মানটি ব্যবহার করুন।
উপরোক্ত সকল যাচাই সফল হলে, আপনি আইডি টোকেনের সাবজেক্ট ( sub ) অংশটিকে সংশ্লিষ্ট ব্যবহারকারী বা ডিভাইসের uid (uid) হিসেবে ব্যবহার করতে পারবেন।