【问题标题】:Decrypt / Verify Firebase token解密/验证 Firebase 令牌
【发布时间】:2016-08-16 11:22:25
【问题描述】:

我正在使用带有电子邮件和密码身份验证的 Firebase。用户成功登录后,我将收到一个包含令牌的 AuthData 对象。
我想将此令牌发送到我的后端,对其进行验证并从中提取 uid - 不幸的是我不知道该怎么做。

我知道 Firebase 机密,如果我转到 jwt.io,请输入令牌和机密,验证签名并看到正确的有效负载 - 所以这确实有效。
由于我在后端运行 Java,我一直在使用 jjwt 进行解密过程,不幸的是它总是抛出 SignatureException

io.jsonwebtoken.SignatureException:JWT 签名与本地计算的签名不匹配。 JWT 的有效性不能被断言,也不应该被信任。

按照我一直在使用的代码:

SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
byte[] encodedKey = Base64.decode("my-firebase-secret", Base64.DEFAULT);
Key k = new SecretKeySpec(encodedKey, signatureAlgorithm.getJcaName());
Claims claims = Jwts.parser()
                    .setSigningKey(k)
                    .parseClaimsJws("the-token").getBody();

我也用下面的 sn-p 试过了:

Claims claims = Jwts.parser()
                    .setSigningKey(DatatypeConverter.parseBase64Binary("my-firebase-secret"))
                    .parseClaimsJws(jwt).getBody();

但得到了同样的例外。那么我做错了什么?提前致谢。

【问题讨论】:

  • 当用户登录时调用 getAuth() 将返回一个带有 uid 字段的对象。 firebase.com/docs/web/api/firebase/getauth.html
  • @RonHarlev 我知道不幸的是我不想将 UID 以纯文本形式发送到我的服务器,因为这会使 JWT 背后的安全性变得毫无用处。即使我这样做了,我仍然需要验证令牌是否有效,而不是未经授权的第 3 方提出的一些生成的东西。

标签: java android firebase jwt


【解决方案1】:

您是否尝试过使用 getBytes 而不是 parseBase64Binary?示例如下:

Claims claims = Jwts.parser().setSigningKey("my-firebase-secret".getBytes("UTF-8")).parseClaimsJws(jwt).getBody();

【讨论】:

  • 就是这样。非常感谢。
猜你喜欢
  • 2016-10-04
  • 1970-01-01
  • 2017-02-17
  • 2017-01-24
  • 2017-11-27
  • 1970-01-01
  • 1970-01-01
  • 2019-04-09
  • 2019-11-26
相关资源
最近更新 更多