firebase tokens php

2025-12-07 0 525

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的官方文档中找到有关自定义令牌以及如何使用它的更多信息。

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

 <?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

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

有关更多信息,请参见管理会话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 ;
}

令牌

从发电机返回的令牌和验证者是\\Kreait\\Firebase\\JWT\\Contract\\Token的实例,并表示jwt。显示的输出是示例,并且根据与项目验证数据库中给定用户相关的信息而有所不同。

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

 $ 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...

租户意识

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

 <?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目前不支持租户。

高级用法

缓存来自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

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 开发教程 firebase tokens php https://www.zuozi.net/31918.html

AspNetCoreCertificates
上一篇: AspNetCoreCertificates
heaphttpd
下一篇: heaphttpd
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务