解密/验证Firebase令牌

时间:2016-04-22 17:55:54

标签: java android firebase jwt

我使用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();

我还尝试使用以下代码段:

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

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

1 个答案:

答案 0 :(得分:5)

您是否尝试过使用getBytes而不是parseBase64Binary?这是一个例子:

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