مكتبة للعمل مع رموز Google Firebase. يمكنك استخدامه لإنشاء رموز مميزة والتحقق من رموز الهوية.
حقق المزيد باستخدام Firebase Admin SDK لـ PHP (الذي يستخدم هذه المكتبة).
يرجى القراءة عن مستقبل Firebase Admin PHP SDK في مستودع GitHub الخاص بـ SDK.
composer require kreait/firebase-tokens
يمكن العثور على مزيد من المعلومات حول ماهية الرمز المميز وكيفية استخدامه في وثائق Google الرسمية.
<?php
use Kreait Firebase JWT CustomTokenGenerator ;
$ clientEmail = ' ... ' ;
$ privateKey = ' ... ' ;
$ generator = CustomTokenGenerator:: withClientEmailAndPrivateKey ( $ clientEmail , $ privateKey );
$ token = $ generator -> createCustomToken ( ' uid ' , [ ' first_claim ' => ' first_value ' /* ... */ ]);
echo $ token ;
// Output: eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.e...
تهدف طرق التحقق من رمز المعرف المضمنة في حزم SDK للمشرف في Firebase إلى التحقق من رموز المعرف المميزة التي تأتي من حزم SDK للعميل، وليس الرموز المميزة المخصصة التي تنشئها باستخدام حزم SDK للمشرف. راجع رموز المصادقة لمزيد من المعلومات.
<?php
use Kreait Firebase JWT Error IdTokenVerificationFailed ;
use Kreait Firebase JWT IdTokenVerifier ;
$ projectId = ' ... ' ;
$ idToken = ' eyJhb... ' ; // An ID token given to your backend by a Client application
$ verifier = IdTokenVerifier:: createWithProjectId ( $ projectId );
try {
$ token = $ verifier -> verifyIdToken ( $ idToken );
} catch ( IdTokenVerificationFailed $ e ) {
echo $ e -> getMessage ();
// Example Output:
// The value 'eyJhb...' is not a verified ID token:
// - The token is expired.
exit ;
}
try {
$ token = $ verifier -> verifyIdTokenWithLeeway ( $ idToken , $ leewayInSeconds = 10000000 );
} catch ( IdTokenVerificationFailed $ e ) {
print $ e -> getMessage ();
exit ;
}
يشبه التحقق من ملف تعريف الارتباط للجلسة التحقق من رمز الهوية.
راجع إدارة ملفات تعريف الارتباط للجلسة لمزيد من المعلومات.
<?php
use Kreait Firebase JWT Error SessionCookieVerificationFailed ;
use Kreait Firebase JWT SessionCookieVerifier ;
$ projectId = ' ... ' ;
$ sessionCookie = ' eyJhb... ' ; // A session cookie given to your backend by a Client application
$ verifier = SessionCookieVerifier:: createWithProjectId ( $ projectId );
try {
$ token = $ verifier -> verifySessionCookie ( $ sessionCookie );
} catch ( SessionCookieVerificationFailed $ e ) {
echo $ e -> getMessage ();
// Example Output:
// The value 'eyJhb...' is not a verified ID token:
// - The token is expired.
exit ;
}
try {
$ token = $ verifier -> verifySessionCookieWithLeeway ( $ sessionCookie , $ leewayInSeconds = 10000000 );
} catch ( SessionCookieVerificationFailed $ e ) {
print $ e -> getMessage ();
exit ;
}
الرموز المميزة التي تم إرجاعها من Generator وVerifier هي مثيلات لـ KreaitFirebaseJWTContractToken
وتمثل JWT. المخرجات المعروضة هي أمثلة وتختلف اعتمادًا على المعلومات المرتبطة بالمستخدم المحدد في قاعدة بيانات المصادقة الخاصة بمشروعك.
وفقًا لمواصفات JWT، يمكنك توقع أن تكون حقول الحمولة التالية متاحة دائمًا: iss
و aud
و auth_time
و sub
و iat
و exp
. تعتمد الحقول الأخرى على طريقة المصادقة الخاصة بالحساب المحدد والمعلومات المخزنة في قاعدة بيانات المصادقة الخاصة بمشروعك.
$ token = $ verifier -> verifyIdToken ( ' eyJhb... ' ); // An ID token given to your backend by a Client application
echo json_encode ( $ token -> headers (), JSON_PRETTY_PRINT );
// {
// "alg": "RS256",
// "kid": "e5a91d9f39fa4de254a1e89df00f05b7e248b985",
// "typ": "JWT"
// }
echo json_encode ( $ token -> payload (), JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES );
// {
// "name": "Jane Doe",
// "picture": "https://domain.tld/picture.jpg",
// "iss": "https://securetoken.google.com/your-project-id",
// "aud": "your-project-id",
// "auth_time": 1580063945,
// "user_id": "W0IturDwy4TYTmX6ilkd2ZbAXRp2",
// "sub": "W0IturDwy4TYTmX6ilkd2ZbAXRp2",
// "iat": 1580063945,
// "exp": 1580067545,
// "email": "[email protected]",
// "email_verified": true,
// "phone_number": "+1234567890",
// "firebase": {
// "identities": {
// "phone": [
// "+1234567890"
// ],
// "email": [
// "[email protected]"
// ]
// },
// "sign_in_provider": "custom"
// }
// }
echo $ token -> toString ();
// eyJhb...
$ tokenString = ( string ) $ token ; // string
// eyJhb...
يمكنك إنشاء رموز مميزة مخصصة لمستأجر معين:
<?php
use Kreait Firebase JWT CustomTokenGenerator ;
$ generator = CustomTokenGenerator:: withClientEmailAndPrivateKey ( ' ... ' , ' ... ' );
$ tenantAwareGenerator = $ generator -> withTenantId ( ' my-tenant-id ' );
وبالمثل، يمكنك التحقق من إصدار الرموز المميزة للمعرف في نطاق مستأجر معين:
<?php
use Kreait Firebase JWT IdTokenVerifier ;
$ verifier = IdTokenVerifier:: createWithProjectId ( ' my-project-id ' );
$ tenantAwareVerifier = $ verifier -> withExpectedTenantId ( ' my-tenant-id ' );
ملفات تعريف الارتباط للجلسة لا تدعم المستأجرين حاليًا.
من أجل التحقق من رموز المعرف، يقوم برنامج التحقق بإجراء اتصال لجلب المفاتيح العامة المتوفرة حاليًا لـ Firebase. يتم تخزين المفاتيح مؤقتًا في الذاكرة بشكل افتراضي.
إذا كنت تريد تخزين المفاتيح العامة مؤقتًا بشكل أكثر فعالية، فيمكنك تهيئة أداة التحقق من خلال تنفيذ psr/simple-cache أو psr/cache لتقليل كمية طلبات HTTP إلى خوادم Google.
فيما يلي مثال باستخدام Symfony Cache Component:
use Kreait Firebase JWT IdTokenVerifier ;
use Symfony Component Cache Adapter FilesystemAdapter ;
$ cache = new FilesystemAdapter ();
$ verifier = IdTokenVerifier:: createWithProjectIdAndCache ( $ projectId , $ cache );
يتم دعم الإصدار الأحدث فقط بشكل نشط.
ستتلقى الإصدارات السابقة إصلاحات أمنية طالما أن أدنى متطلبات PHP الخاصة بها تتلقى إصلاحات أمنية. على سبيل المثال، عندما يدعم الإصدار PHP 7.4 وPHP 8.0، سينتهي الدعم الأمني عندما ينتهي الدعم الأمني لـ PHP 7.4.
إصدار | الإصدار الأولي | إصدارات PHP المدعومة | حالة |
---|---|---|---|
5.x | 25 نوفمبر 2023 | ~8.1.0, ~8.2.0, ~8.3.0 | نشيط |
4.x | 26 نوفمبر 2022 | ~8.1.0, ~8.2.0, ~8.3.0 | دعم الأمن |
3.x | 25 أبريل 2022 | ^7.4, ^8.0 | نهاية الحياة |
2.x | 03 يناير 2022 | ^7.4, ^8.0 | نهاية الحياة |
1.x | 06 فبراير 2017 | >=5.5 | نهاية الحياة |
رخصة معهد ماساتشوستس للتكنولوجيا (MIT). يرجى الاطلاع على ملف الترخيص لمزيد من المعلومات.