ไลบรารี่ที่จะทำงานร่วมกับโทเค็น Google Firebase คุณสามารถใช้เพื่อสร้างโทเค็นที่กำหนดเองและตรวจสอบโทเค็น ID ได้
บรรลุผลสำเร็จมากขึ้นด้วย 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...
วิธีการตรวจสอบโทเค็น ID ที่รวมอยู่ใน Firebase Admin SDK มีไว้เพื่อตรวจสอบโทเค็น ID ที่มาจาก SDK ไคลเอ็นต์ ไม่ใช่โทเค็นที่กำหนดเองที่คุณสร้างด้วย Admin 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 ;
}
การตรวจสอบคุกกี้เซสชันจะคล้ายกับการตรวจสอบโทเค็น ID
ดูจัดการคุกกี้เซสชันสำหรับข้อมูลเพิ่มเติม
<?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
ฟิลด์อื่นๆ ขึ้นอยู่กับวิธีการตรวจสอบสิทธิ์ของบัญชีที่กำหนดและข้อมูลที่จัดเก็บไว้ในฐานข้อมูล Auth ของโปรเจ็กต์ของคุณ
$ 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 ' );
ในทำนองเดียวกัน คุณสามารถตรวจสอบได้ว่าโทเค็น ID ได้รับการออกในขอบเขตของผู้เช่าที่กำหนด:
<?php
use Kreait Firebase JWT IdTokenVerifier ;
$ verifier = IdTokenVerifier:: createWithProjectId ( ' my-project-id ' );
$ tenantAwareVerifier = $ verifier -> withExpectedTenantId ( ' my-tenant-id ' );
คุกกี้เซสชันในปัจจุบันไม่รองรับผู้เช่า
ในการตรวจสอบโทเค็น 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 พ.ย. 2566 | ~8.1.0, ~8.2.0, ~8.3.0 | คล่องแคล่ว |
4.x | 26 พ.ย. 2565 | ~8.1.0, ~8.2.0, ~8.3.0 | การสนับสนุนด้านความปลอดภัย |
3.x | 25 เม.ย. 2565 | ^7.4, ^8.0 | บั้นปลายชีวิต |
2.x | 03 ม.ค. 2565 | ^7.4, ^8.0 | บั้นปลายชีวิต |
1.x | 06 กุมภาพันธ์ 2560 | >=5.5 | บั้นปลายชีวิต |
ใบอนุญาตเอ็มไอที (MIT) โปรดดูไฟล์ใบอนุญาตสำหรับข้อมูลเพิ่มเติม