আইডি টোকেন যাচাই করা

আপনার Firebase ক্লায়েন্ট অ্যাপ যদি কোনও কাস্টম ব্যাকএন্ড সার্ভারের সাথে যোগাযোগ করে, তাহলে আপনাকে হয়ত সেই সার্ভারে বর্তমানে সাইন-ইন করা ব্যবহারকারীকে শনাক্ত করতে হবে। এটি নিরাপদে করতে, সাইন-ইন করার পরে, HTTPS ব্যবহার করে আপনার সার্ভারে ব্যবহারকারীর আইডি টোকেন পাঠান। তারপর, সার্ভারে, আইডি টোকেনের ইন্টিগ্রিটি ও সত্যতা যাচাই করুন এবং সেটি থেকে uid ফিরিয়ে আনুন। আপনার সার্ভারে বর্তমানে সাইন-ইন করা ব্যবহারকারীকে নিরাপদে শনাক্ত করতে, আপনি এইভাবে ট্রান্সমিট করা uid ব্যবহার করতে পারবেন।

শুরু করার আগে

Firebase Admin SDK-এর মাধ্যমে আইডি টোকেন যাচাই করতে, আপনার একটি পরিষেবা অ্যাকাউন্ট থাকতে হবে। পরিষেবা অ্যাকাউন্টের মাধ্যমে কীভাবে অ্যাডমিন SDK শুরু করবেন সেই সম্পর্কে আরও তথ্য পেতে, অ্যাডমিন SDK সেট-আপ করার নির্দেশাবলী অনুসরণ করুন।

ক্লায়েন্টে আইডি টোকেন ফিরিয়ে আনুন

কোনও ব্যবহারকারী বা ডিভাইস সফলভাবে সাইন-ইন করলে, Firebase একটি সংশ্লিষ্ট ID টোকেন তৈরি করে যা তাদের অনন্যভাবে শনাক্ত করে এবং তাদের বিভিন্ন রিসোর্সে অ্যাক্সেস দেয়, যেমন Firebase Realtime Database এবং Cloud Storage। আপনার কাস্টম ব্যাকএন্ড সার্ভারে ব্যবহারকারী বা ডিভাইস শনাক্ত করতে আপনি সেই ID টোকেন আবার ব্যবহার করতে পারবেন। ক্লায়েন্টের থেকে আইডি টোকেন ফিরিয়ে আনতে, ব্যবহারকারী সাইন-ইন করেছেন কিনা তা নিশ্চিত করুন এবং তারপর সাইন-ইন করা ব্যবহারকারীর থেকে আইডি টোকেন পান:

iOS+

Objective-C
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
          // ...
}];
Swift
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
  // ...
}

Android

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();
            }
        }
    });

Unity

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
  // ...
});

C++

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 অ্যাডমিন SDK ব্যবহার করে আইডি টোকেন যাচাই করা

Firebase অ্যাডমিন SDK-তে আইডি টোকেন যাচাই ও ডিকোড করার জন্য বিল্ট-ইন পদ্ধতি রয়েছে। প্রদান করা আইডি টোকেনের ফর্ম্যাট সঠিক হলে, মেয়াদ শেষ না হলে এবং সঠিকভাবে সাইন করা থাকলে, পদ্ধতিটি ডিকোড করা আইডি টোকেন রিটার্ন করে। আপনি ডিকোড করা টোকেন থেকে ব্যবহারকারী বা ডিভাইসের uid পেতে পারেন।

পরিষেবা অ্যাকাউন্টের মাধ্যমে Admin SDK শুরু করতে Admin SDK সেট-আপ করার নির্দেশাবলী অনুসরণ করুন। তারপর, আইডি টোকেন যাচাই করতে verifyIdToken() পদ্ধতি ব্যবহার করুন:

Node.js

// 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();

Python

# id_token comes from the client app (shown above)

decoded_token = auth.verify_id_token(id_token)
uid = decoded_token['uid']

Go

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)

C#

FirebaseToken decodedToken = await FirebaseAuth.DefaultInstance
    .VerifyIdTokenAsync(idToken);
string uid = decodedToken.Uid;

আইডি টোকেন যাচাইকরণের জন্য প্রোজেক্ট আইডি প্রয়োজন। Firebase অ্যাডমিন SDK নিম্নলিখিত যেকোনও একটি পদ্ধতির মাধ্যমে প্রোজেক্ট আইডি পাওয়ার চেষ্টা করে:

  • SDK যদি নির্দিষ্ট projectId অ্যাপ বিকল্পের মাধ্যমে শুরু করা হয়, তাহলে SDK সেই বিকল্পের ভ্যালু ব্যবহার করে।
  • পরিষেবা অ্যাকাউন্টের ক্রেডেনশিয়াল দিয়ে SDK শুরু করা হলে, SDK পরিষেবা অ্যাকাউন্টের JSON অবজেক্টের project_id ফিল্ড ব্যবহার করে।
  • GOOGLE_CLOUD_PROJECT এনভায়রনমেন্ট ভেরিয়েবেল সেট করা থাকলে, SDK প্রোজেক্ট আইডি হিসেবে এর ভ্যালু ব্যবহার করে। এই এনভায়রনমেন্ট ভেরিয়েবল Google ইনফ্রাস্ট্রাকচারে চলা কোডের জন্য উপলভ্য, যেমন App Engine এবং Compute Engine।

থার্ড-পার্টি JWT লাইব্রেরি ব্যবহার করে আইডি টোকেন যাচাই করুন

আপনার ব্যাকএন্ড যদি এমন কোনও ভাষায় থাকে যা Firebase Admin SDK-তে কাজ করে না, তাহলেও আপনি আইডি টোকেন যাচাই করতে পারবেন। প্রথমে, আপনার ভাষার জন্য থার্ড-পার্টি JWT লাইব্রেরি খুঁজুন। তারপর, আইডি টোকেনের হেডার, পেলোড ও স্বাক্ষর যাচাই করুন।

আইডি টোকেনের হেডার নিম্নলিখিত সীমাবদ্ধতা মেনে চলছে কিনা তা যাচাই করুন:

ID টোকেন হেডার সংক্রান্ত দাবি
alg অ্যালগরিদম "RS256"
kid কী আইডি https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com-এ তালিকাভুক্ত পাবলিক 'কী'-এর মধ্যে কোনও একটির সাথে অবশ্যই মিলতে হবে

আইডি টোকেনের পেলোড নিম্নলিখিত সীমাবদ্ধতা মেনে চলছে কিনা তা যাচাই করুন:

আইডি টোকেন পেলোড সংক্রান্ত দাবি
exp মেয়াদ শেষ হওয়ার সময় ভবিষ্যতের কোনও তারিখ হতে হবে। UNIX epoch থেকে সেকেন্ডে সময় পরিমাপ করা হয়।
iat ইস্যু করার সময় অবশ্যই আগেকার কোনও তারিখ হতে হবে। UNIX epoch থেকে সেকেন্ডে সময় পরিমাপ করা হয়।
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 হিসেবে ID টোকেনের সাবজেক্ট (sub) ব্যবহার করতে পারবেন।