一個使用 Google Firebase 令牌的函式庫。您可以使用它來建立自訂令牌並驗證 ID 令牌。
使用適用於 PHP 的 Firebase Admin SDK(使用此程式庫)實現更多目標。
請在 SDK 的 GitHub 儲存庫上了解 Firebase Admin PHP 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...
Firebase 管理 SDK 中包含的 ID 令牌驗證方法旨在驗證來自用戶端 SDK 的 ID 令牌,而不是您使用管理 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 ;
}
會話cookie驗證類似於ID Token驗證。
有關更多信息,請參閱管理會話 Cookie。
<?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 ;
}
從生成器和驗證器傳回的令牌是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 ' );
同樣,您可以驗證 ID 令牌是否是在給定租戶的範圍內頒發的:
<?php
use Kreait Firebase JWT IdTokenVerifier ;
$ verifier = IdTokenVerifier:: createWithProjectId ( ' my-project-id ' );
$ tenantAwareVerifier = $ verifier -> withExpectedTenantId ( ' my-tenant-id ' );
會話 cookie 目前不支援租用戶。
為了驗證 ID 令牌,驗證者會呼叫以取得 Firebase 目前可用的公鑰。預設情況下,密鑰會緩存在記憶體中。
如果您想要更有效地快取公鑰,可以使用 psr/simple-cache 或 psr/cache 的實作來初始化驗證器,以減少對 Google 伺服器的 HTTP 請求量。
這是使用 Symfony 快取元件的範例:
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 | 2023 年 11 月 25 日 | ~8.1.0, ~8.2.0, ~8.3.0 | 積極的 |
4.x | 2022 年 11 月 26 日 | ~8.1.0, ~8.2.0, ~8.3.0 | 安全支援 |
3.x | 2022 年 4 月 25 日 | ^7.4, ^8.0 | 生命終點 |
2.x | 2022 年 1 月 3 日 | ^7.4, ^8.0 | 生命終點 |
1.x | 2017 年 2 月 6 日 | >=5.5 | 生命終點 |
麻省理工學院許可證 (MIT)。請參閱許可證文件以獲取更多資訊。