【问题标题】:Firebase Token VerificationFirebase 令牌验证
【发布时间】:2016-10-04 16:42:43
【问题描述】:

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

我使用JWT.io 来检查我的令牌并尝试验证它,但没有成功。由于使用的算法是 RS256,所以验证应该通过公钥来完成。但是什么公钥?我尝试使用我的应用程序的密钥库,尝试使用 Google 的证书,但它只是一直说它无效。我知道 headerkid 字段是签名密钥的 ID,我应该查找它,但我不知道在哪里。

Firebase 文档也无济于事。有一个关于 ID token verification 的指南,但这只是没用,因为它是 Java / Node.JS 并且它仍然没有说明任何关于公钥的内容。

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

【问题讨论】:

    标签: php android firebase jwt firebase-authentication


    【解决方案1】:

    好的,所以我挖掘了 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 URL 找到的。

    【讨论】:

    猜你喜欢
    • 2017-02-17
    • 2017-01-24
    • 2016-08-16
    • 2019-04-09
    • 2019-11-26
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多