首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我在尝试用SignatureVerificationException验证JWT时得到PS256?

为什么我在尝试用SignatureVerificationException验证JWT时得到PS256?
EN

Stack Overflow用户
提问于 2022-10-09 02:00:47
回答 1查看 69关注 0票数 1

我正在试图验证JWT上的签名。这是我代码的一部分:

代码语言:javascript
运行
复制
DecodedJWT jwt = JWT.decode(token);
...
JwkProvider provider = new JwkProviderBuilder(jwksUrl).build();
Jwk jwk = provider.get(jwt.getKeyId());         
Algorithm algorithm = Algorithm.RSA256((RSAPublicKey) jwk.getPublicKey(), null);
algorithm.verify(jwt);

我只知道一个错误:

代码语言:javascript
运行
复制
com.auth0.jwt.exceptions.SignatureVerificationException: The Token's Signature resulted invalid when verified using the Algorithm: SHA256withRSA

但是,在jwt中,我可以看到算法显示为PS256而不是RSA256。这就是问题所在吗?我怎样才能得到这个来验证JWT?对于算法上的PS256,没有枚举选项。在某个地方看到可能是RSASSA,但我也看不出有什么选择。

更多信息: JWT是由外部提供者以一种奇怪的方式传递给我的,它不仅仅是HTTP头中的承载令牌,所以我需要自己来处理,而不是依赖框架来处理它。我正在使用Java 17。相关的依赖关系:

代码语言:javascript
运行
复制
        <dependency>
          <groupId>com.auth0</groupId>
          <artifactId>java-jwt</artifactId>
          <version>4.0.0</version>
        </dependency>
        <dependency>
          <groupId>com.auth0</groupId>
          <artifactId>jwks-rsa</artifactId>
          <version>0.21.2</version>
        </dependency>
EN

回答 1

Stack Overflow用户

发布于 2022-10-20 20:09:51

我用白龙计算出了答案,但我确实需要自己增加一些价值。以下是解决办法:

代码语言:javascript
运行
复制
DecodedJWT jwt = JWT.decode(token);
URL url = new
JwkProvider provider = new JwkProviderBuilder(jwksUrl)
  .build();
 Jwk jwk = provider.get(jwt.getKeyId());
SignatureAlgorithm sa = SignatureAlgorithm
  .forName(jwt.getAlgorithm());
DefaultJwtSignatureValidator validator = 
  new DefaultJwtSignatureValidator(sa, jwk.getPublicKey());
if (!validator.isValid(jwt.getHeader()+"."+jwt.getPayload(), jwt.getSignature())) {
    throw new Exception("Could not verify JWT token integrity!");
}

为了完成这项工作,我必须向我的依赖项添加jjwt:

代码语言:javascript
运行
复制
<dependency>
  <groupId>io.jsonwebtoken</groupId>
  <artifactId>jjwt</artifactId>
  <version>0.7.0</version>
</dependency>

.forName()调用意味着它处理不同的算法,具体取决于JWT中指定的alg

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74001668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档