Firebase令牌验证

时间:2016-06-04 19:40:43

标签: php android firebase jwt firebase-authentication

我有一个PHP后端和一个Android客户端。通过客户端,用户可以使用Google或Facebook通过Firebase登录我的应用。我从FirebaseUser获取令牌并将其发送到我的服务器。很简单,第一部分(标题)包含算法(RS256),第二部分(有效负载)包含所有用户相关数据。还有第三部分是前两部分的签名,以便在我的后端进行验证。问题是,我不知道该怎么做。更具体地说是什么。

我使用JWT.io来检查我的令牌并尝试验证它没有运气。由于使用的算法是RS256,因此应通过公钥进行验证。但是什么公钥呢?我尝试使用我的应用程序的密钥库,尝试使用Google的证书,但它只是说它无效。我知道标头kid字段是签名密钥的ID,我应该查找它,但我不知道在哪里。

Firebase文档也没有帮助。有一个关于ID token verification的指南,但这只是无用的,因为它是Java / Node.JS,它仍然没有说公共密钥。

所以问题是:我从哪里获取公钥?

1 个答案:

答案 0 :(得分:3)

好的,所以我挖掘了Firebase Server SDK的源代码并找到了公钥的位置: https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com

不知道为什么他们不能把它放在他们的网站上......

无论如何,我不确定,但我想这些密钥每天都在变化(就像OAuth2密钥一样),所以你必须经常检查并重新缓存它们在服务器上。

此外,您还必须检查以下值:

  • alg == "RS256"
  • isshttps://securetoken.google.com/<firebaseProjectID>
  • aud<firebaseProjectID>
  • sub非空
  

this similar question滚动到答案的底部)找到这些内容,这是通过搜索特定的 googleapis.com 网址找到的。< / p>