anc*_*ea4 6 java base64 android token jwt
我试图从我的 Web 应用程序的 api 中获取一个令牌,并在 android studio 中从中解析出用户 ID。我正在使用 jjwt 解码令牌,但遇到了这个问题。我在网上阅读,解决方案说要确保我的“密钥”在 base 64 中,但它仍然导致问题。
我尝试使用编码器和在线编码器并对我的“秘密”的 base-64 字符串进行硬编码,但仍然返回相同的问题。在这里可以找到指向有类似问题的人的链接 github.com/auth0/node-jsonwebtoken/issues/208
final TextView tv = (TextView) findViewById(R.id.tvText);
final String token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjVjOWYzYWI2NzY2Mjg2NDYyNDY0YTczNCIsIm5hbWUiOiJSYW5keSIsImF2YXRhciI6Ii8vd3d3LmdyYXZhdGFyLmNvbS9hdmF0YXIvMTNhN2MyYzdkOGVkNTNkMDc2MzRkOGNlZWVkZjM0NTE_cz0yMDAmcj1wZyZkPW1tIiwiaWF0IjoxNTU0NTIxNjk1LCJleHAiOjE1NTQ1MjUyOTV9._SxRurShXS-SI3SE11z6nme9EoaD29T_DBFr8Qwngkg";
final String secret = "secret";
String secret64 = "c2VjcmV0";
String encoded = Base64.encodeToString(secret.getBytes(), Base64.DEFAULT);
Jws<Claims> jws;
try {
jws = Jwts.parser() // (1)
.setSigningKey(secret64) // (2)
.parseClaimsJws(token); // (3)
// we can safely trust the JWT
}
catch (JwtException ex) { // (4)
// we *cannot* use the JWT as intended by its creator
tv.setText(ex.toString());
}
Run Code Online (Sandbox Code Playgroud)
Tej*_*dya 16
验证密钥的大小为 48 位
这句话讲述了整个故事。secret您使用的密钥太短。如果您使用的HS256是SHA-256需要至少256 位或更大的HMAC,则必须与HS256算法一起使用。
JSON Web 算法 RFC 7518 规定,与哈希输出大小相同(例如,“HS256”为 256 位)或更大的密钥必须与 HS256 算法一起使用。
所以改变你的密钥大小,你很高兴
| 归档时间: |
|
| 查看次数: |
11648 次 |
| 最近记录: |