Google 致力于为黑人社区推动种族平等。查看具体举措

কাস্টম টোকেন তৈরি করুন

ফায়ারবেস আপনাকে সুরক্ষিত জেএসওএন ওয়েব টোকেন (জেডাব্লুটি) ব্যবহার করে ব্যবহারকারী বা ডিভাইসগুলিকে অনুমোদনের অনুমতি দিয়ে প্রমাণীকরণের উপরে সম্পূর্ণ নিয়ন্ত্রণ দেয়। আপনি আপনার সার্ভারে এই টোকেনগুলি তৈরি করেন, এগুলি আবার ক্লায়েন্ট ডিভাইসে পাস করুন এবং তারপরে signInWithCustomToken() পদ্ধতির মাধ্যমে প্রমাণীকরণের জন্য signInWithCustomToken() ব্যবহার করুন।

এটি অর্জন করার জন্য আপনাকে অবশ্যই একটি সার্ভার এন্ডপয়েন্ট তৈরি করতে হবে যা সাইন-ইন শংসাপত্রগুলি গ্রহণ করে - যেমন একটি ব্যবহারকারীর নাম এবং পাসওয়ার্ড — এবং, যদি শংসাপত্রগুলি বৈধ হয় তবে একটি কাস্টম জেডব্লিউটি প্রদান করে। আপনার সার্ভার থেকে ফিরে আসা কাস্টম জেডাব্লুটিটি ক্লায়েন্ট ডিভাইস দ্বারা ফায়ারবেস ( আইওএস , অ্যান্ড্রয়েড , ওয়েব ) এর সাথে অনুমোদনের জন্য ব্যবহার করা যেতে পারে। একবার প্রমাণীকরণ হয়ে গেলে, ফায়ারবেস রিয়েলটাইম ডেটাবেস এবং ক্লাউড স্টোরেজ যেমন ফায়ারবেস পরিষেবাগুলি অ্যাক্সেস করার সময় এই পরিচয় ব্যবহার করা হবে। তদ্ব্যতীত, জেডাব্লুটিটির বিষয়বস্তুগুলি আপনার রিয়েলটাইম ডেটাবেস বিধিগুলিতে auth অবজেক্ট এবং আপনার ক্লাউড স্টোরেজ সুরক্ষা বিধিগুলিতে request.auth অবজেক্টে উপলব্ধ।

আপনি ফায়ারবেস অ্যাডমিন এসডিকে দিয়ে একটি কাস্টম টোকন তৈরি করতে পারেন, বা যদি আপনার সার্ভার এমন কোনও ভাষায় লিখিত থাকে যা ফায়ারবেস স্থানীয়ভাবে সমর্থন করে না।

তুমি শুরু করার আগে

কাস্টম টোকেনগুলি JWT গুলিতে স্বাক্ষরিত হয় যেখানে সাইন ইন করার জন্য ব্যবহৃত ব্যক্তিগত কী কোনও Google পরিষেবা অ্যাকাউন্টের অন্তর্ভুক্ত। গুগল পরিষেবা অ্যাকাউন্ট নির্দিষ্ট করার বিভিন্ন উপায় রয়েছে যা কাস্টম টোকেনগুলিতে স্বাক্ষর করার জন্য ফায়ারবেস অ্যাডমিন এসডিকে ব্যবহার করা উচিত:

  • কোনও পরিষেবা অ্যাকাউন্ট JSON ফাইল ব্যবহার করে - এই পদ্ধতিটি যে কোনও পরিবেশে ব্যবহার করা যেতে পারে তবে আপনার কোড সহ একটি পরিষেবা অ্যাকাউন্ট JSON ফাইল প্যাকেজ করা দরকার। পরিষেবা অ্যাকাউন্ট JSON ফাইলটি বাহ্যিক দলগুলির কাছে প্রকাশিত না হওয়ার বিষয়ে বিশেষ যত্ন নিতে হবে।
  • অ্যাডমিন এসডিকে একটি পরিষেবা অ্যাকাউন্ট আবিষ্কার করতে দেওয়া - এই পদ্ধতিটি গুগল ক্লাউড ফাংশন এবং অ্যাপ ইঞ্জিনের মতো গুগল দ্বারা পরিচালিত পরিবেশে ব্যবহার করা যেতে পারে। গুগল ক্লাউড কনসোলের মাধ্যমে আপনাকে কিছু অতিরিক্ত অনুমতি কনফিগার করতে হবে।
  • পরিষেবা অ্যাকাউন্ট আইডি ব্যবহার করে - গুগল-পরিচালিত পরিবেশে ব্যবহৃত হওয়ার পরে এই পদ্ধতিটি নির্দিষ্ট পরিষেবা অ্যাকাউন্টের কী ব্যবহার করে টোকেনগুলিতে স্বাক্ষর করবে। তবে এটি একটি রিমোট ওয়েব পরিষেবা ব্যবহার করে এবং আপনাকে এই ক্লাউড কনসোলের মাধ্যমে এই পরিষেবা অ্যাকাউন্টের জন্য অতিরিক্ত অনুমতিগুলি কনফিগার করতে হবে।

একটি পরিষেবা অ্যাকাউন্ট JSON ফাইল ব্যবহার করে

পরিষেবা অ্যাকাউন্ট JSON ফাইলগুলিতে পরিষেবা অ্যাকাউন্টগুলির সাথে সম্পর্কিত সমস্ত তথ্য থাকে (আরএসএর ব্যক্তিগত কী সহ)। সেগুলি ফায়ারবেস কনসোল থেকে ডাউনলোড করা যায়। পরিষেবা অ্যাকাউন্ট জেএসএন ফাইল দিয়ে অ্যাডমিন এসডিকে কীভাবে আরম্ভ করতে হবে সে সম্পর্কে আরও তথ্যের জন্য অ্যাডমিন এসডিকে সেটআপ নির্দেশাবলী অনুসরণ করুন।

প্রারম্ভিককরণের এই পদ্ধতিটি অ্যাডমিন এসডিকে মোতায়েনের বিস্তারের জন্য উপযুক্ত। এছাড়াও এটি অ্যাডমিন এসডিকে স্থানীয়ভাবে কাস্টম টোকেনগুলি তৈরি করতে এবং স্বাক্ষর করতে সক্ষম করে, কোনও দূরবর্তী এপিআই কল না করেই। এই পদ্ধতির মূল অপূর্ণতা হ'ল এটি আপনাকে আপনার কোড সহ একটি পরিষেবা অ্যাকাউন্ট JSON ফাইল প্যাকেজ করতে হবে to এছাড়াও নোট করুন যে কোনও পরিষেবা অ্যাকাউন্টে JSON ফাইলে থাকা ব্যক্তিগত কীটি সংবেদনশীল তথ্য, এবং এটি গোপনীয় রাখতে বিশেষ যত্ন নেওয়া উচিত। বিশেষত, পরিষেবা অ্যাকাউন্ট JSON ফাইলগুলি সর্বজনীন সংস্করণ নিয়ন্ত্রণে যুক্ত করা থেকে বিরত থাকুন।

অ্যাডমিন এসডিকে একটি পরিষেবা অ্যাকাউন্ট আবিষ্কার করতে দেওয়া

যদি আপনার কোড গুগল পরিচালিত কোনও পরিবেশে স্থাপন করা হয়, তবে অ্যাডমিন এসডিকে কাস্টম টোকেনগুলিতে স্বাক্ষর করার জন্য একটি উপায় স্বয়ংক্রিয়ভাবে আবিষ্কার করার চেষ্টা করতে পারে:

  • যদি আপনার কোডটি জাভা, পাইথন বা গো এর জন্য অ্যাপ ইঞ্জিনের স্ট্যান্ডার্ড পরিবেশে মোতায়েন করা হয়, তবে অ্যাডমিন এসডিকে কাস্টম টোকেনগুলিতে সাইন করতে সেই পরিবেশে উপস্থিত অ্যাপ আইডেন্টিটি পরিষেবাটি ব্যবহার করতে পারে। গুগল অ্যাপ ইঞ্জিন দ্বারা আপনার অ্যাপের জন্য সরবরাহ করা পরিষেবা অ্যাকাউন্ট ব্যবহার করে অ্যাপ আইডেন্টিটি পরিষেবা ডেটা সই করে।

  • যদি আপনার কোডটি অন্য কোনও পরিচালিত পরিবেশে স্থাপন করা হয় (যেমন গুগল ক্লাউড ফাংশন, গুগল কম্পিউট ইঞ্জিন), ফায়ারবেস অ্যাডমিন এসডিকে স্থানীয় মেটাডেটা সার্ভার থেকে কোনও পরিষেবা অ্যাকাউন্ট আইডি স্ট্রিংটি স্বয়ংক্রিয়ভাবে আবিষ্কার করতে পারে । এরপরে সার্চ অ্যাকাউন্ট অ্যাকাউন্ট আইডিটি টোকেনকে দূর থেকে সাইন করতে আইএএম পরিষেবার সাথে একত্রে ব্যবহৃত হয়।

এই স্বাক্ষর করার পদ্ধতিগুলি ব্যবহার করতে, এসডিকে গুগল অ্যাপ্লিকেশন ডিফল্ট শংসাপত্রগুলি দিয়ে আরম্ভ করুন এবং কোনও পরিষেবা অ্যাকাউন্ট আইডি স্ট্রিং নির্দিষ্ট করবেন না:

নোড.জেএস

admin.initializeApp();

জাভা

FirebaseApp.initializeApp();

পাইথন

default_app = firebase_admin.initialize_app()

যাওয়া

app, err := firebase.NewApp(context.Background(), nil)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

সি #

FirebaseApp.Create();

স্থানীয়ভাবে একই কোডটি পরীক্ষা করতে, কোনও পরিষেবা অ্যাকাউন্ট JSON ফাইল ডাউনলোড করুন এবং এতে নির্দেশ করার জন্য GOOGLE_APPLICATION_CREDENTIALS পরিবেশের পরিবর্তনশীল সেট করুন।

যদি ফায়ারবেস অ্যাডমিন এসডিকে কোনও পরিষেবা অ্যাকাউন্ট আইডি স্ট্রিংটি আবিষ্কার করতে হয়, এটি যখন তখন আপনার কোডটি প্রথমবারের জন্য কাস্টম টোকেন তৈরি করে। ফলাফলটি টোকেন স্বাক্ষরকারী ক্রিয়াকলাপগুলির জন্য ক্যাশেড এবং পুনরায় ব্যবহার করা হয়েছে। স্বতঃ-আবিষ্কার পরিষেবা পরিষেবা আইডি সাধারণত গুগল ক্লাউড দ্বারা সরবরাহিত ডিফল্ট পরিষেবা অ্যাকাউন্টগুলির মধ্যে একটি:

স্পষ্টভাবে নির্দিষ্ট পরিষেবা অ্যাকাউন্ট আইডিগুলির মতো, স্বতঃ-আবিষ্কার পরিষেবা পরিষেবা iam.serviceAccounts.signBlob কাস্টম টোকেন তৈরির কাজ করার জন্য iam.serviceAccounts.signBlob অনুমতি থাকতে হবে। ডিফল্ট পরিষেবা অ্যাকাউন্টগুলিকে প্রয়োজনীয় অনুমতিগুলি দেওয়ার জন্য আপনাকে গুগল ক্লাউড কনসোলের আইএএম এবং প্রশাসক বিভাগটি ব্যবহার করতে হতে পারে। আরও তথ্যের জন্য নীচে সমস্যা সমাধানের বিভাগটি দেখুন।

একটি পরিষেবা অ্যাকাউন্ট আইডি ব্যবহার করে

আপনার অ্যাপ্লিকেশনের বিভিন্ন অংশের মধ্যে ধারাবাহিকতা বজায় রাখতে আপনি একটি পরিষেবা অ্যাকাউন্ট আইডি নির্দিষ্ট করতে পারেন যার গুগল পরিচালিত পরিবেশে চলার সময় টোকেনগুলিতে সাইন করতে ব্যবহৃত হবে keys এটি আইএএম নীতিগুলি সহজ এবং আরও সুরক্ষিত করতে পারে এবং আপনার কোডে পরিষেবা অ্যাকাউন্ট জেএসএন ফাইল অন্তর্ভুক্ত করা এড়াতে পারে।

পরিষেবা অ্যাকাউন্টের আইডি গুগল ক্লাউড কনসোলে বা ডাউনলোড করা পরিষেবা অ্যাকাউন্ট জেএসওএন ফাইলের client_email ক্ষেত্রে পাওয়া যাবে। পরিষেবা অ্যাকাউন্ট আইডি <client-id>@<project-id>.iam.gserviceaccount.com ইমেল ঠিকানা যা নীচের ফর্ম্যাটটি রয়েছে: <client-id>@<project-id>.iam.gserviceaccount.com । তারা ফায়ারবেস এবং গুগল ক্লাউড প্রকল্পগুলিতে পরিষেবা অ্যাকাউন্টগুলিকে অনন্যভাবে সনাক্ত করে।

পৃথক পরিষেবা অ্যাকাউন্ট আইডি ব্যবহার করে কাস্টম টোকেন তৈরি করতে, এসডিকে নীচে দেখানো হিসাবে শুরু করুন:

নোড.জেএস

admin.initializeApp({
  serviceAccountId: 'my-client-id@my-project-id.iam.gserviceaccount.com',
});

জাভা

FirebaseOptions options = FirebaseOptions.builder()
    .setCredentials(GoogleCredentials.getApplicationDefault())
    .setServiceAccountId("my-client-id@my-project-id.iam.gserviceaccount.com")
    .build();
FirebaseApp.initializeApp(options);

পাইথন

0Ef7166a0

যাওয়া

conf := &firebase.Config{
	ServiceAccountID: "my-client-id@my-project-id.iam.gserviceaccount.com",
}
app, err := firebase.NewApp(context.Background(), conf)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

সি #

FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.GetApplicationDefault(),
    ServiceAccountId = "my-client-id@my-project-id.iam.gserviceaccount.com",
});

পরিষেবা অ্যাকাউন্ট আইডি সংবেদনশীল তথ্য নয় এবং তাই তাদের এক্সপোজারটি অনিবার্য। তবে নির্দিষ্ট পরিষেবা অ্যাকাউন্টের সাথে কাস্টম টোকেনগুলিতে সাইন করতে, ফায়ারবেস অ্যাডমিন এসডিকে অবশ্যই একটি দূরবর্তী পরিষেবা শুরু করতে হবে। {project-name}@appspot.gserviceaccount.com , আপনাকে অবশ্যই নিশ্চিত করতে হবে যে প্রশাসন অ্যাকাউন্টটি এই কলটি করার জন্য প্রশাসনিক অ্যাকাউন্টটি ব্যবহার করছে — {project-name}@appspot.gserviceaccount.com - এ iam.serviceAccounts.signBlob অনুমতি রয়েছে । আরও তথ্যের জন্য নীচে সমস্যা সমাধানের বিভাগটি দেখুন।

ফায়ারবেস অ্যাডমিন এসডিকে ব্যবহার করে কাস্টম টোকেন তৈরি করুন

ফায়ারবেস অ্যাডমিন এসডিকে কাস্টম টোকেন তৈরির জন্য অন্তর্নির্মিত পদ্ধতি রয়েছে। সর্বনিম্ন, আপনাকে একটি uid করতে হবে যা কোনও স্ট্রিং হতে পারে তবে ব্যবহারকারী বা ডিভাইসটিকে অনন্যতার সাথে চিহ্নিত করা উচিত যা আপনি প্রমাণীকরণ করছেন। এই টোকেনগুলি এক ঘন্টা পরে শেষ হয়।

নোড.জেএস

const uid = 'some-uid';

admin
  .auth()
  .createCustomToken(uid)
  .then((customToken) => {
    // Send token back to client
  })
  .catch((error) => {
    console.log('Error creating custom token:', error);
  });

জাভা

String uid = "some-uid";

String customToken = FirebaseAuth.getInstance().createCustomToken(uid);
// Send token back to client

পাইথন

uid = 'some-uid'

custom_token = auth.create_custom_token(uid)

যাওয়া

client, err := app.Auth(context.Background())
if err != nil {
	log.Fatalf("error getting Auth client: %v\n", err)
}

token, err := client.CustomToken(ctx, "some-uid")
if err != nil {
	log.Fatalf("error minting custom token: %v\n", err)
}

log.Printf("Got custom token: %v\n", token)

সি #

var uid = "some-uid";

string customToken = await FirebaseAuth.DefaultInstance.CreateCustomTokenAsync(uid);
// Send token back to client

আপনি কাস্টম টোকেনে অন্তর্ভুক্ত করার জন্য অতিরিক্ত দাবিগুলিও optionচ্ছিকভাবে নির্দিষ্ট করতে পারেন। উদাহরণ হিসেবে বলা যায়, নিচে, একটি premiumAccount ক্ষেত্র কাস্টম টোকেন, যা পাওয়া যাবে যোগ করা হয়েছে auth / request.auth আপনার নিরাপত্তা বিধি বস্তু:

নোড.জেএস

const userId = 'some-uid';
const additionalClaims = {
  premiumAccount: true,
};

admin
  .auth()
  .createCustomToken(userId, additionalClaims)
  .then((customToken) => {
    // Send token back to client
  })
  .catch((error) => {
    console.log('Error creating custom token:', error);
  });

জাভা

String uid = "some-uid";
Map<String, Object> additionalClaims = new HashMap<String, Object>();
additionalClaims.put("premiumAccount", true);

String customToken = FirebaseAuth.getInstance()
    .createCustomToken(uid, additionalClaims);
// Send token back to client

পাইথন

uid = 'some-uid'
additional_claims = {
    'premiumAccount': True
}

custom_token = auth.create_custom_token(uid, additional_claims)

যাওয়া

client, err := app.Auth(context.Background())
if err != nil {
	log.Fatalf("error getting Auth client: %v\n", err)
}

claims := map[string]interface{}{
	"premiumAccount": true,
}

token, err := client.CustomTokenWithClaims(ctx, "some-uid", claims)
if err != nil {
	log.Fatalf("error minting custom token: %v\n", err)
}

log.Printf("Got custom token: %v\n", token)

সি #

var uid = "some-uid";
var additionalClaims = new Dictionary<string, object>()
{
    { "premiumAccount", true },
};

string customToken = await FirebaseAuth.DefaultInstance
    .CreateCustomTokenAsync(uid, additionalClaims);
// Send token back to client

ক্লায়েন্টগুলিতে কাস্টম টোকেন ব্যবহার করে সাইন ইন করুন

আপনি একটি কাস্টম টোকেন তৈরি করার পরে, আপনার এটি আপনার ক্লায়েন্ট অ্যাপ্লিকেশনটিতে প্রেরণ করা উচিত। ক্লায়েন্ট অ্যাপ্লিকেশন সাইন signInWithCustomToken() কাস্টম টোকেন signInWithCustomToken() কল করে কাস্টম টোকেনের সাথে প্রমাণীকরণ করেছে:

আইওএস

উদ্দেশ্য গ
[[FIRAuth auth] signInWithCustomToken:customToken
                           completion:^(FIRAuthDataResult * _Nullable authResult,
                                        NSError * _Nullable error) {
  // ...
}];
সুইফট
Auth.auth().signIn(withCustomToken: customToken ?? "") { (user, error) in
  // ...
}

অ্যান্ড্রয়েড

mAuth.signInWithCustomToken(mCustomToken)
        .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    // Sign in success, update UI with the signed-in user's information
                    Log.d(TAG, "signInWithCustomToken:success");
                    FirebaseUser user = mAuth.getCurrentUser();
                    updateUI(user);
                } else {
                    // If sign in fails, display a message to the user.
                    Log.w(TAG, "signInWithCustomToken:failure", task.getException());
                    Toast.makeText(CustomAuthActivity.this, "Authentication failed.",
                            Toast.LENGTH_SHORT).show();
                    updateUI(null);
                }
            }
        });

.ক্য

auth.SignInWithCustomTokenAsync(custom_token).ContinueWith(task => {
  if (task.IsCanceled) {
    Debug.LogError("SignInWithCustomTokenAsync was canceled.");
    return;
  }
  if (task.IsFaulted) {
    Debug.LogError("SignInWithCustomTokenAsync encountered an error: " + task.Exception);
    return;
  }

  Firebase.Auth.FirebaseUser newUser = task.Result;
  Debug.LogFormat("User signed in successfully: {0} ({1})",
      newUser.DisplayName, newUser.UserId);
});

সি ++

firebase::Future<firebase::auth::User*> result =
    auth->SignInWithCustomToken(custom_token);

ওয়েব

firebase.auth().signInWithCustomToken(token)
  .then((userCredential) => {
    // Signed in
    var user = userCredential.user;
    // ...
  })
  .catch((error) => {
    var errorCode = error.code;
    var errorMessage = error.message;
    // ...
  });

যদি প্রমাণীকরণটি সফল হয়, আপনার ব্যবহারকারী এখন কাস্টম টোকেনের অন্তর্ভুক্ত uid দ্বারা নির্দিষ্ট অ্যাকাউন্টের সাথে আপনার ক্লায়েন্ট অ্যাপ্লিকেশনটিতে সাইন ইন হয়ে যাবে। যদি সেই অ্যাকাউন্টটি আগে উপস্থিত না থাকে তবে সেই ব্যবহারকারীর জন্য একটি রেকর্ড তৈরি করা হবে।

সঙ্গে অন্যান্য সাইন-ইন পদ্ধতি (যেমন হিসাবে একই ভাবে signInWithEmailAndPassword() এবং signInWithCredential() ) auth আপনার বস্তুর রিয়েলটাইম ডাটাবেস বিধি এবং request.auth আপনার বস্তুর ক্লাউড স্টোরেজ সিকিউরিটি রুলস ব্যবহারকারীর সঙ্গে পূরণ করা হবে uid । এই ক্ষেত্রে, কাস্টম টোকেনটি তৈরি করার সময় আপনি uid নির্দিষ্ট করেছেন।

ডাটাবেস বিধি

{
  "rules": {
    "adminContent": {
      ".read": "auth.uid === 'some-uid'"
    }
  }
}

স্টোরেজ বিধি

service firebase.storage {
  match /b/<your-firebase-storage-bucket>/o {
    match /adminContent/{filename} {
      allow read, write: if request.auth != null && request.auth.uid == "some-uid";
    }
  }
}

যদি কাস্টম auth.token অতিরিক্ত দাবি থাকে তবে auth.token ( auth.token রিয়েলটাইম ডেটাবেস) বা request.auth.token . auth.token (ক্লাউড স্টোরেজ) auth.token আপনার নিয়মের মধ্যে উল্লেখ করা যেতে পারে:

ডাটাবেস বিধি

{
  "rules": {
    "premiumContent": {
      ".read": "auth.token.premiumAccount === true"
    }
  }
}

স্টোরেজ বিধি

service firebase.storage {
  match /b/<your-firebase-storage-bucket>/o {
    match /premiumContent/{filename} {
      allow read, write: if request.auth.token.premiumAccount == true;
    }
  }
}

তৃতীয় পক্ষের জেডাব্লুটি লাইব্রেরি ব্যবহার করে কাস্টম টোকেন তৈরি করুন

যদি আপনার ব্যাকএন্ডটি এমন কোনও ভাষায় থাকে যার অফিশিয়াল ফায়ারবেস অ্যাডমিন এসডিকে নেই, আপনি এখনও ম্যানুয়ালি কাস্টম টোকেন তৈরি করতে পারেন। প্রথমে আপনার ভাষার জন্য একটি তৃতীয় পক্ষের JWT গ্রন্থাগার সন্ধান করুন। তারপরে, জেডব্লিউটি লাইব্রেরিটি কোনও জেডাব্লুটি টাকশাল করতে ব্যবহার করুন যাতে নিম্নলিখিত দাবিগুলি অন্তর্ভুক্ত রয়েছে:

কাস্টম টোকেন দাবি
alg অ্যালগরিদম "RS256"
iss ইস্যুকারী আপনার প্রকল্পের পরিষেবা অ্যাকাউন্টের ইমেল ঠিকানা
sub বিষয় আপনার প্রকল্পের পরিষেবা অ্যাকাউন্টের ইমেল ঠিকানা
aud শ্রোতা "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit"
iat জারি-সময়ে ইউনিক্সের সূচনা হওয়ার পরে সেকেন্ডে বর্তমান সময়
exp মেয়াদ শেষ হওয়ার সময় ইউএনআইএক্সের সূচনার সময় থেকে কয়েক সেকেন্ড পরে টোকেনের মেয়াদ শেষ হয়ে গেছে। এটি iat চেয়ে সর্বোচ্চ 3600 সেকেন্ড পরে হতে পারে।
দ্রষ্টব্য: কাস্টম টোকেন নিজেই মেয়াদ শেষ হলে এটি কেবল তখনই নিয়ন্ত্রণ করে। তবে আপনি একবার ব্যবহারকারীর সাইন signInWithCustomToken() ব্যবহার করে সাইন ইন করলে, তাদের সেশনটি অবৈধ না হওয়া বা ব্যবহারকারী সাইন আউট না হওয়া পর্যন্ত তারা ডিভাইসে সাইন ইন থাকবে।
uid সাইন ইন থাকা ব্যবহারকারীর অনন্য পরিচয়কারীটি অবশ্যই একটি স্ট্রিং হতে হবে, 1-36 অক্ষরের মধ্যে দীর্ঘ between
claims (alচ্ছিক) Rচ্ছিক কাস্টম দাবী সুরক্ষা auth / request.auth ভেরিয়েবলগুলিতে অন্তর্ভুক্ত করার জন্য claims

ফায়ারবেস অ্যাডমিন এসডিকে সমর্থন করে না এমন বিভিন্ন ভাষায় কাস্টম টোকেন তৈরি করার কয়েকটি উদাহরণ এখানে রয়েছে:

পিএইচপি

php-jwt ব্যবহার:

// Requires: composer require firebase/php-jwt
use Firebase\JWT\JWT;

// Get your service account's email address and private key from the JSON key file
$service_account_email = "abc-123@a-b-c-123.iam.gserviceaccount.com";
$private_key = "-----BEGIN PRIVATE KEY-----...";

function create_custom_token($uid, $is_premium_account) {
  global $service_account_email, $private_key;

  $now_seconds = time();
  $payload = array(
    "iss" => $service_account_email,
    "sub" => $service_account_email,
    "aud" => "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
    "iat" => $now_seconds,
    "exp" => $now_seconds+(60*60),  // Maximum expiration time is one hour
    "uid" => $uid,
    "claims" => array(
      "premium_account" => $is_premium_account
    )
  );
  return JWT::encode($payload, $private_key, "RS256");
}

রুবি

ruby-jwt ব্যবহার:

require "jwt"

# Get your service account's email address and private key from the JSON key file
$service_account_email = "service-account@my-project-abc123.iam.gserviceaccount.com"
$private_key = OpenSSL::PKey::RSA.new "-----BEGIN PRIVATE KEY-----\n..."

def create_custom_token(uid, is_premium_account)
  now_seconds = Time.now.to_i
  payload = {:iss => $service_account_email,
             :sub => $service_account_email,
             :aud => "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
             :iat => now_seconds,
             :exp => now_seconds+(60*60), # Maximum expiration time is one hour
             :uid => uid,
             :claims => {:premium_account => is_premium_account}}
  JWT.encode payload, $private_key, "RS256"
end

আপনি কাস্টম টোকেন তৈরি করার পরে, ফায়ারবেস দিয়ে অনুমোদনের জন্য এটি ব্যবহার করতে আপনার ক্লায়েন্ট অ্যাপ্লিকেশনটিতে এটি প্রেরণ করুন। এটি করার জন্য উপরের কোডের নমুনাগুলি দেখুন।

সমস্যা সমাধান

এই বিভাগে কাস্টম টোকেন তৈরি করার সময় ডেভেলপারদের মুখোমুখি হতে পারে এবং সেগুলি কীভাবে সমাধান করা যায় সেগুলির কয়েকটি সাধারণ সমস্যাগুলির রূপরেখা দেয়।

আইএএম এপিআই সক্ষম নয়

আপনি যদি টোকেনগুলিতে স্বাক্ষর করার জন্য কোনও পরিষেবা অ্যাকাউন্ট আইডি নির্দিষ্ট করে থাকেন তবে আপনি নিম্নলিখিতগুলির মতো একটি ত্রুটি পেতে পারেন:

Identity and Access Management (IAM) API has not been used in project
1234567890 before or it is disabled. Enable it by visiting
https://console.developers.google.com/apis/api/iam.googleapis.com/overview?project=1234567890
then retry. If you enabled this API recently, wait a few minutes for the action
to propagate to our systems and retry.

ফায়ারবেস অ্যাডমিন এসডিকে টোকেনগুলিতে সাইন ইন করতে আইএএম এপিআই ব্যবহার করে। এই ত্রুটিটি নির্দেশ করে যে বর্তমানে আপনার ফায়ারবেস প্রকল্পের জন্য আইএএম এপিআই সক্ষম নয়। কোনও ওয়েব ব্রাউজারে ত্রুটি বার্তায় লিঙ্কটি খুলুন এবং এটি আপনার প্রকল্পের জন্য সক্ষম করতে "এপিআই সক্ষম করুন" বোতামটি ক্লিক করুন।

পরিষেবা অ্যাকাউন্টে অনুমতিগুলির প্রয়োজনীয়তা নেই

যদি ফায়ারবেস অ্যাডমিন এসডিকে পরিষেবা অ্যাকাউন্ট চলমান থাকে তবে iam.serviceAccounts.signBlob অনুমতি নেই, আপনি নীচের মতো একটি ত্রুটি বার্তা পেতে পারেন:

Permission iam.serviceAccounts.signBlob is required to perform this operation
on service account projects/-/serviceAccounts/{your-service-account-id}.

এর সমাধানের সহজতম উপায় হ'ল "পরিষেবা অ্যাকাউন্ট টোকেন ক্রিয়েটর" আইএএম ভূমিকাটি {project-name}@appspot.gserviceaccount.com পরিষেবা অ্যাকাউন্টে প্রদান করা হয়, সাধারণত {project-name}@appspot.gserviceaccount.com :

  1. গুগল ক্লাউড কনসোলে আইএএম এবং প্রশাসক পৃষ্ঠাটি খুলুন।
  2. আপনার প্রকল্প নির্বাচন করুন এবং "চালিয়ে যান" ক্লিক করুন।
  3. আপনি যে পরিষেবাটি আপডেট করতে চান তা সম্পর্কিত সম্পাদনা আইকনটি ক্লিক করুন।
  4. "অন্য ভূমিকা যুক্ত করুন" এ ক্লিক করুন।
  5. অনুসন্ধান ফিল্টারে "পরিষেবা অ্যাকাউন্ট টোকেন নির্মাতা" টাইপ করুন এবং ফলাফল থেকে এটি নির্বাচন করুন।
  6. ভূমিকা অনুদানটি নিশ্চিত করতে "সংরক্ষণ করুন" এ ক্লিক করুন।

এই প্রক্রিয়াটি সম্পর্কে আরও বিশদ জানতে আইএএম ডকুমেন্টেশন পড়ুন, বা কীভাবে গ্লকাউড কমান্ড-লাইন সরঞ্জাম ব্যবহার করে হালকা ভূমিকা করতে হয় তা শিখুন।

পরিষেবা অ্যাকাউন্ট নির্ধারণে ব্যর্থ

যদি আপনি নীচের মতো একটি ত্রুটি বার্তা পান তবে ফায়ারবেস অ্যাডমিন এসডিকে সঠিকভাবে শুরু করা হয়নি।

Failed to determine service account ID. Initialize the SDK with service account
credentials or specify a service account ID with iam.serviceAccounts.signBlob
permission.

আপনি যদি কোনও পরিষেবা অ্যাকাউন্ট আইডি স্বতঃ-আবিষ্কার করতে এসডিকে নির্ভর করে থাকেন তবে কোডটি কোনও মেটাডেটা সার্ভারের সাথে পরিচালিত গুগল পরিবেশে স্থাপন করা আছে তা নিশ্চিত করুন। অন্যথায়, SDK প্রারম্ভিকালে পরিষেবা অ্যাকাউন্ট JSON ফাইল বা পরিষেবা অ্যাকাউন্ট আইডি নির্দিষ্ট করা নিশ্চিত করুন be