Google is committed to advancing racial equity for Black communities. See how.
ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

تحقق من رموز الهوية

إذا اتصل تطبيق عميل Firebase بخادم خلفية مخصص ، فقد تحتاج إلى تحديد المستخدم الذي قام بتسجيل الدخول حاليًا على هذا الخادم. للقيام بذلك بشكل آمن ، بعد تسجيل الدخول بنجاح ، أرسل رمز معرف المستخدم إلى خادمك باستخدام HTTPS. ثم ، على الخادم ، تحقق من سلامة وصحة الرمز المميز للمعرف واسترجع uid منه. يمكنك استخدام uid المرسلة بهذه الطريقة لتحديد المستخدم الذي سجّل الدخول حاليًا على خادمك بشكل آمن.

قبل ان تبدأ

للتحقق من الرموز المميزة للمعرّف باستخدام Firebase Admin SDK ، يجب أن يكون لديك حساب خدمة. اتبع إرشادات إعداد Admin SDK للحصول على مزيد من المعلومات حول كيفية تهيئة Admin SDK بحساب خدمة.

استرجاع الرموز المميزة للعملاء

عندما يسجّل مستخدم أو جهاز بنجاح تسجيل الدخول ، ينشئ Firebase رمزًا مميزًا للرقم التعريفي المقابل يحددهم بشكل فريد ويمنحهم الوصول إلى العديد من الموارد ، مثل Firebase Realtime Database and 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 != nullptr) {
  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
});
 

بمجرد حصولك على رمز معرف ، يمكنك إرسال JWT إلى الواجهة الخلفية والتحقق منه باستخدام Firebase Admin SDK ، أو باستخدام مكتبة JWT خارجية إذا كان الخادم مكتوبًا بلغة لا يدعمها Firebase في الأصل.

تحقق من الرموز المميزة للمعرف باستخدام حزمة Firebase Admin SDK

تحتوي Firebase Admin SDK على طريقة مضمنة للتحقق من رموز ID المميزة وفك تشفيرها. إذا كان الرمز المميز للمعرف الذي تم توفيره بالتنسيق الصحيح ، ولم يكن منتهي الصلاحية ، وتم التوقيع عليه بشكل صحيح ، فإن الطريقة ترجع الرمز المميز للمعرف الذي تم فك ترميزه. يمكنك الحصول على uid المستخدم أو الجهاز من الرمز الذي تم فك ترميزه.

اتبع إرشادات إعداد SDK للمشرف لتهيئة Admin SDK بحساب خدمة. بعد ذلك ، استخدم طريقة verifyIdToken() للتحقق من الرمز المميز للمعرف:

Node.js

 // idToken comes from the client app
admin.auth().verifyIdToken(idToken)
  .then(function(decodedToken) {
    let uid = decodedToken.uid;
    // ...
  }).catch(function(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 بخيار تطبيق projectId صريح ، projectId SDK قيمة هذا الخيار.
  • إذا تمت تهيئة SDK باستخدام بيانات اعتماد حساب الخدمة ، project_id SDK الحقل project_id لكائن JSON لحساب الخدمة.
  • إذا تم تعيين متغير البيئة GOOGLE_CLOUD_PROJECT ، يستخدم SDK قيمته كمعرف المشروع. يتوفر متغير البيئة هذا للتعليمات البرمجية التي يتم تشغيلها على البنية الأساسية لـ Google مثل Google App Engine و Google Compute Engine.

تحقق من الرموز المميزة للمعرف باستخدام مكتبة JWT خارجية

إذا كانت الخلفية الخاصة بك بلغة غير مدعومة بواسطة Firebase Admin SDK ، فلا يزال بإمكانك التحقق من الرموز المميزة للمعرف. أولاً ، ابحث عن مكتبة JWT خارجية للغتك . ثم تحقق من العنوان والحمولة والتوقيع لرمز المعرف.

تحقق من أن عنوان الرمز المميز للمعرف يتوافق مع القيود التالية:

مطالبات رأس الرمز المميز
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 للتحقق من التوقيع. استخدم قيمة max-age في رأس Cache-Control في Cache-Control للاستجابة من نقطة النهاية هذه لمعرفة وقت تحديث المفاتيح العامة.

وإذا كان كل عمليات التحقق المذكورة أعلاه هي ناجحة، يمكنك استخدام هذا الموضوع ( sub ) من ID رمزية مثل uid للمستخدم المقابلة أو الجهاز.