firebase tokens php

其他类别 2025-08-20

firebase令牌

与Google Firebase令牌合作的库。您可以使用它来创建自定义令牌并验证ID令牌。

使用PHP的Firebase Admin SDK(使用此库)实现了更多。


Firebase Admin PHP SDK的未来

请阅读有关SDK GITHUB存储库上Firebase Admin PHP SDK的未来。


  • 安装
  • 简单用法
    • 创建自定义令牌
    • 验证ID令牌
    • 验证会话cookie
    • 令牌
    • 租户意识
  • 高级用法
    • 缓存来自Google安全令牌商店
  • 支持版本

安装

composer require kreait/firebase-tokens

简单用法

创建自定义令牌

可以在Google的官方文档中找到有关自定义令牌以及如何使用它的更多信息。

 

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的ID令牌,而不是您使用Admin SDK创建的自定义令牌。有关更多信息,请参见auth令牌。

 

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

会话Cookie验证类似于ID令牌验证。

有关更多信息,请参见管理会话cookie。

 

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规范,您可以期望以下有效负载字段可用: issaudauth_timesubiatexp 。其他字段取决于给定帐户的身份验证方法以及您项目验证数据库中存储的信息。

payload(), JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); // { // "name": "Jane Doe", // "picture": "https://*domai*n.*tld/picture.jpg", // "iss": "https://securetoken.g*oog**le.com/your-project-id", // "aud": "your-project-id", // "auth_time": 1580063945, // "user_id": "W0IturDwy4TYTmX6ilkd2ZbAXRp2", // "sub": "W0IturDwy4TYTmX6ilkd2ZbAXRp2", // "iat": 1580063945, // "exp": 1580067545, // "email": "jane@doe.tld", // "email_verified": true, // "phone_number": "+1234567890", // "firebase": { // "identities": { // "phone": [ // "+1234567890" // ], // "email": [ // "jane@doe.tld" // ] // }, // "sign_in_provider": "custom" // } // } echo $token->toString(); // eyJhb... $tokenString = (string) $token; // string // eyJhb...">
 $ 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://dom*ain**.tld/picture.jpg",
//     "iss": "https://securetoken.*go*o*gle.com/your-project-id",
//     "aud": "your-project-id",
//     "auth_time": 1580063945,
//     "user_id": "W0IturDwy4TYTmX6ilkd2ZbAXRp2",
//     "sub": "W0IturDwy4TYTmX6ilkd2ZbAXRp2",
//     "iat": 1580063945,
//     "exp": 1580067545,
//     "email": "jane@doe.tld",
//     "email_verified": true,
//     "phone_number": "+1234567890",
//     "firebase": {
//         "identities": {
//             "phone": [
//                 "+1234567890"
//             ],
//             "email": [
//                 "jane@doe.tld"
//             ]
//         },
//         "sign_in_provider": "custom"
//     }
// }

echo $ token -> toString ();
// eyJhb...

$ tokenString = ( string ) $ token ; // string
// eyJhb...

租户意识

您可以创建针对给定房客的自定义令牌:

 

use Kreait  Firebase  JWT  CustomTokenGenerator ;

$ generator = CustomTokenGenerator:: withClientEmailAndPrivateKey ( ' ... ' , ' ... ' );

$ tenantAwareGenerator = $ generator -> withTenantId ( ' my-tenant-id ' );

同样,您可以验证ID令牌是在给定房客的范围内发布的:

 

use Kreait  Firebase  JWT  IdTokenVerifier ;

$ verifier = IdTokenVerifier:: createWithProjectId ( ' my-project-id ' );

$ tenantAwareVerifier = $ verifier -> withExpectedTenantId ( ' my-tenant-id ' );

cookie目前不支持租户。

高级用法

缓存来自Google安全令牌商店

为了验证ID令牌,验证者致电Fetch Firebase当前可用的公共钥匙。键默认将密钥缓存在内存中。

如果您想更有效地缓存公共钥匙,则可以通过实现PSR/Simple-Cache或PSR/CACHE初始化验证符,以减少对Google服务器的HTTP请求量。

这是使用Symfony Cache组件的一个示例:

 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 生命的尽头

执照

麻省理工学院许可证(麻省理工学院)。请参阅许可证文件以获取更多信息。

下载源码

通过命令行克隆项目:

git clone https://github.com/kreait/firebase-tokens-php.git