为了账号安全,请及时绑定邮箱和手机立即绑定

在Firebase 3中仍然可以对令牌进行服务器端验证吗?

在Firebase 3中仍然可以对令牌进行服务器端验证吗?

月关宝盒 2019-10-17 10:25:34
在Firebase 3中仍然可以对令牌进行服务器端验证吗?我们使用现有的身份验证系统(使用服务帐户)在运行Golang的服务器上生成自定义令牌(JWT)。该令牌在iOS客户端上使用FIRAuth.auth()?.signInWithCustomToken(customToken)到那为止一切正常。但是,当我们将客户端令牌传递给从以下位置检索的服务器时:FIRUser.getTokenWithCompletion({ token, error in ..})我们无法验证它。JWT令牌使用RS256签名并具有header.kid,我们无法识别。服务帐户中的公共密钥(用于签署自定义令牌)不会验证客户端令牌。验证客户端令牌所需的公钥是否可用?我知道可以使用Java或Javascript中的“ verifyIdToken”调用来验证客户端令牌,但是我们希望能够使用标准JWT库在Golang中做到这一点。所有这些在Firebase 2(使用HS256和Firebase机密)中都可以正常工作。
查看完整描述

2 回答

?
开满天机

TA贡献1786条经验 获得超12个赞

那么火力不允许核查custom tokens他们所做的事情是为了让验证id tokens他们在登录使用自定义的令牌一旦用户生成。因此,就像我一样,如果您将Firebase自定义令牌传递给其他服务以通过后端进行身份验证,那么自定义令牌验证的责任就在您身上!此外,Google服务帐户的X509 cert格式不正确。它具有这些\n (new line)定界符,这些定界符不会在文本编辑器中被换行(我使用vim)。因此,我所做的是这样的:


  val factory = CertificateFactory.getInstance("X.509")

  val certificateFile = this.getClass.getResourceAsStream(Play.current.configuration.getString("firebase.certificate").get)

  val publicKey = factory.generateCertificate(certificateFile).asInstanceOf[X509Certificate].getPublicKey

  val claimBody = Jwts.parser().setSigningKey(publicKey).parseClaimsJws(compactJws).getBody

得到谷歌的服务帐户链接证书中下载的JSON规定而设立火力

手动更换\n新线

获取JWT库。我使用了这个很棒的库来验证Java JWT

阅读证书并提取公共密钥。

使用公钥验证令牌

确保您还有另一个API可以刷新令牌,因为仅一个小时有效

希望有帮助!


查看完整回答
反对 回复 2019-10-17
  • 2 回答
  • 0 关注
  • 768 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信