作者:moon2502863581 | 来源:互联网 | 2023-02-07 11:24
我有一个PHP后端和一个Android客户端.使用客户端,用户可以通过Firebase使用Google或Facebook登录到我的应用程序.我从FirebaseUser获得令牌并将
我有一个PHP后端和一个Android客户端.使用客户端,用户可以通过Firebase使用Google或Facebook登录到我的应用程序.我从FirebaseUser获得令牌并将其发送到我的服务器.显而易见的是,第一部分(标头)包含算法(RS256),第二部分(有效负载)具有所有与用户相关的数据.第三部分是前两个部分的签名,以便在我的后端进行验证.问题是,我不知道该怎么做.更具体地说是什么.
我使用JWT.io来检查我的令牌,并尝试通过运气来验证它.由于使用的算法是RS256,因此验证应通过公钥进行.但是什么公钥?我尝试使用我的应用程序的密钥库,尝试使用Google的证书,但是一直在说它无效.我知道标题的孩子字段是签名密钥的ID,我应该寻找它,但是我不知道在哪里.
Firebase文档也无济于事.有一个关于ID token verification的指南,但这没什么用,因为它是Java / Node.JS,并且仍然没有提及任何有关公共密钥的内容.
所以问题是:我从哪里获得公钥?
解决方法:
好的,所以我深入研究了Firebase Server SDK的源代码,并找到了公钥的位置:
https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com
真的不知道为什么他们不能将其放在他们的网站上…
无论如何,我不确定,但是我想这些密钥每天都会更改(就像OAuth2密钥一样),因此您必须不时检查并重新缓存在服务器上.
另外,您必须检查以下值:
> alg ==“ RS256”
> iss:https://securetoken.google.com/\u0026lt; firebaseProjectID>
> aud:
>子为非空
Found these at 07001 (just scroll to the bottom of the answer), which was found by searching for that specific googleapis.com URL.