猿问

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

在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机密)中都可以正常工作。


月关宝盒
浏览 794回答 2
2回答

开满天机

那么火力不允许核查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可以刷新令牌,因为仅一个小时有效希望有帮助!
随时随地看视频慕课网APP
我要回答