إذا كان تطبيق عميل Firebase الخاص بك يتصل بخادم خلفية مخصص ، فقد تحتاج إلى تحديد المستخدم المسجل الدخول حاليًا على هذا الخادم. للقيام بذلك بشكل آمن ، بعد نجاح تسجيل الدخول ، أرسل رمز معرف المستخدم إلى الخادم الخاص بك باستخدام 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
});
بمجرد حصولك على رمز معرف ، يمكنك إرسال JWT إلى الواجهة الخلفية الخاصة بك والتحقق من صحته باستخدام Firebase Admin SDK ، أو باستخدام مكتبة JWT لجهة خارجية إذا كان خادمك مكتوبًا بلغة لا يدعمها Firebase في الأصل.
تحقق من الرموز المميزة للمعرف باستخدام Firebase Admin SDK
تحتوي حزمة Firebase Admin 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();
بايثون
# 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
الصريح ، فإن SDK تستخدم قيمة هذا الخيار. - إذا تمت تهيئة SDK باستخدام بيانات اعتماد حساب الخدمة ، فإن SDK تستخدم الحقل
project_id
لكائن JSON لحساب الخدمة. - إذا تم تعيين متغير البيئة
GOOGLE_CLOUD_PROJECT
، فإن SDK تستخدم قيمتها كمعرف المشروع. يتوفر متغير البيئة هذا للرمز الذي يتم تشغيله على بنية Google الأساسية مثل 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 | تاريخ انتهاء الصلاحية | يجب أن يكون في المستقبل. يتم قياس الوقت بالثواني منذ عهد 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
للاستجابة من نقطة النهاية هذه لمعرفة وقت تحديث المفاتيح العامة.
إذا نجحت جميع عمليات التحقق المذكورة أعلاه ، فيمكنك استخدام الموضوع ( sub
) لرمز المعرف المميز باعتباره uid
للمستخدم أو الجهاز المقابل.