我使用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();
但得到了同样的例外。那么我做错了什么?提前谢谢。
答案 0 :(得分:5)
您是否尝试过使用getBytes而不是parseBase64Binary?这是一个例子:
Claims claims = Jwts.parser().setSigningKey("my-firebase-secret".getBytes("UTF-8")).parseClaimsJws(jwt).getBody();