我有一个PHP后端和一个Android客户端。通过客户端,用户可以使用Google或Facebook通过Firebase登录我的应用。我从FirebaseUser
获取令牌并将其发送到我的服务器。很简单,第一部分(标题)包含算法(RS256),第二部分(有效负载)包含所有用户相关数据。还有第三部分是前两部分的签名,以便在我的后端进行验证。问题是,我不知道该怎么做。更具体地说是什么。
我使用JWT.io来检查我的令牌并尝试验证它没有运气。由于使用的算法是RS256,因此应通过公钥进行验证。但是什么公钥呢?我尝试使用我的应用程序的密钥库,尝试使用Google的证书,但它只是说它无效。我知道标头的kid
字段是签名密钥的ID,我应该查找它,但我不知道在哪里。
Firebase文档也没有帮助。有一个关于ID token verification的指南,但这只是无用的,因为它是Java / Node.JS,它仍然没有说公共密钥。
所以问题是:我从哪里获取公钥?
答案 0 :(得分:3)
好的,所以我挖掘了Firebase Server SDK的源代码并找到了公钥的位置: https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com
不知道为什么他们不能把它放在他们的网站上......
无论如何,我不确定,但我想这些密钥每天都在变化(就像OAuth2密钥一样),所以你必须经常检查并重新缓存它们在服务器上。
此外,您还必须检查以下值:
alg == "RS256"
iss
:https://securetoken.google.com/<firebaseProjectID>
aud
:<firebaseProjectID>
sub
非空在this similar question(滚动到答案的底部)找到这些内容,这是通过搜索特定的 googleapis.com 网址找到的。< / p>