- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我尝试创建 JWT token
final String jws = Jwts.builder()
.claim("rainId", rainId.toString())
.signWith(SignatureAlgorithm.HS256, TextCodec.BASE64.decode("jwtSecretKey"))
.compact();
然后我尝试解析它
Jws<Claims> jwsClaims = Jwts.parser()
.require("rainId", rainId.toString())
.setSigningKey(TextCodec.BASE64.decode("jwtSecretKey1"))
.parseClaimsJws(jws);
如您所见,SigningKey
略有不同,因此我预计解析器会失败,但并没有发生。只有当解析器中的 SigningKey
有很大差异时才会发生。例如“jwtSecretKey111111111111111111111111111111”或“dsfdsfdsfdsfds”。如果解析器中的 SigningKey
略有不同,有人可以解释为什么解析器不会失败吗?
我用
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
最佳答案
您似乎没有正确使用 API。
signWith()
和 setSigningKey()
方法都需要一个 Base64 编码的字符串作为输入。但是您正在调用 TextCodec.BASE64.decode("...")
。
jwtSecretKey
和 jwtSecretKey1
看起来都不像 Base64 编码的字符串。但是,如果您尝试解码它们,它们将产生相同的输出:
System.out.println(Arrays.toString(TextCodec.BASE64.decode("jwtSecretKey")));
System.out.println(Arrays.toString(TextCodec.BASE64.decode("jwtSecretKey1")));
[-113, 11, 82, 121, -54, -34, -76, -89, -78]
[-113, 11, 82, 121, -54, -34, -76, -89, -78]
这就是签名验证不会失败的原因。
您应该改用 TextCodec.BASE64.encode("...")
,如下所示:
String jws = Jwts.builder()
.claim("rainId", rainId.toString())
.signWith(SignatureAlgorithm.HS256, TextCodec.BASE64.encode("jwtSecretKey"))
.compact();
Jws<Claims> jwsClaims = Jwts.parser()
.require("rainId",rainId.toString())
.setSigningKey(TextCodec.BASE64.encode("jwtSecretKey1"))
.parseClaimsJws(jws);
关于java - 如果 SigningKey 略有不同,JJWT 解析不会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52623326/
我需要在 pyNaCl 中生成签名和私钥并将它们存储在某个地方。之后,我需要能够从字符串加载它们。 这是生成新的 SigningKey 和公钥的代码。 def gen_keys(): glob
关于这个我不明白的异常,我需要帮助...我什至没有在谷歌上找到任何相关内容。 *java.security.KeyStoreException]:[提供的 keystore 配置不正确,它必须包含“d
我尝试创建 JWT token final String jws = Jwts.builder() .claim("rainId", rainId.toString())
我最近设置了 GPG 来签署我的 Git 提交,所以现在我的 gitconfig 中有一个 signingKey 字段。我对 GPG 的细节不是很熟悉——这个 signingKey 是一条我应该保密的
我正在尝试遵循以下帖子中的解决方案,以便能够使用 CNG 私钥作为我的 SignedXml 的签名 key 。 "Invalid provider type specified" Cryptograp
我正在使用 JWT 进行身份验证。我使用 signingKey 来编码我的 token 。我想将 signingKey 存储在客户端的安全位置(避免对其进行硬编码)。我希望为此使用 android k
我正在尝试使用存储在 HSM 中的证书来实现 XML 签名的一些演示。 我从此链接中发现了一些有趣的示例: Sign XML Document with X509Certificate2并将其修改为使
我是一名优秀的程序员,十分优秀!