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规范,您可以期望以下有效负载字段可用: 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://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 |
生命的尽头 |
执照
麻省理工学院许可证(麻省理工学院)。请参阅许可证文件以获取更多信息。
通过命令行克隆项目: