【问题标题】:Replacement for deprecated Spring Security JwtHelper替换已弃用的 Spring Security JwtHelper
【发布时间】:2020-08-17 07:20:15
【问题描述】:

我利用 org.springframework.security:spring-security-jwt:1.1.0.RELEASE 中的 org.springframework.security.jwt.JwtHelper 类来解码 JWT 令牌,例如

Jwt jwt = JwtHelper.decode(accessToken);
String claims = jwt.getClaims();

以上类已弃用,弃用注释指向Spring Security OAuth 2.0 Migration Guide

本指南不讨论 JwtHelper 的任何替换。

我找到了 JwtDecoders 类,它在新的 spring-security-oauth2 项目中创建了一个 JwtDecoder。但是JwtDecoders 需要issuer 才能被传递。

由于我不想验证令牌,是否有简单的替代方法可用?否则我可以拆分. 并对令牌进行base64 解码,并使用任何JSON 库进行解析。

【问题讨论】:

    标签: spring-security jwt


    【解决方案1】:

    不要跳过令牌验证!未能正确验证令牌将导致应用程序不安全。

    • 检查令牌的颁发者(iss 声明)并验证它是否正确以及它应该被您的应用程序接受是非常重要的。仅接受来自有权为您的应用授予访问令牌的颁发者的令牌。
    • 还要验证令牌是否适用于您的应用程序(检查 aud 声明):您不希望用户滥用适用于其他应用程序的令牌(例如,如果用户拥有具有所有正确声明的令牌,但 aud 声明设置为另一个应用程序;这不应该是您的有效令牌)。
    • 现在,请务必检查令牌的签名,以验证它实际上是由发行人签名的,并且它不是伪造的令牌:您可以通过联系发行人找到发行人的公钥。如果您没有直接从颁发者那里获得公钥,并且您没有正确验证传入令牌的签名,恶意用户将能够伪造您的应用程序将接受的看似有效的令牌,并且您的应用程序将面临大量数据泄露的风险。
    • 最后一步是检查有效性(是否已过期?),然后检查您的应用期望和要求的任何其他声明或范围。

    【讨论】:

    • 很抱歉给您带来了困惑。令牌验证当然首先由入口或过滤器/中间件完成。这个问题的范围只是解码令牌以读取声明。
    • 除了您列出的那些之外,可能还需要验证audiencescopeproof of possession 以增强安全性。
    【解决方案2】:

    如果您希望避免额外的依赖(例如nimbus-jose-jwt),请随时 fork 或复制这个小型实用程序类:JwtUtils.java

    【讨论】:

      【解决方案3】:

      Spring Security 中使用的替换是nimbus-jose-jwt。如果您不使用 Spring Boot,则必须选择一个版本,否则 Spring Boot 会为您选择一个。

      <dependency>
          <groupId>com.nimbusds</groupId>
          <artifactId>nimbus-jose-jwt</artifactId>
      </dependency>
      

      你可以这样使用它:

      import com.nimbusds.jwt.JWTParser;
      
      ....
      
      JWT jwt = JWTParser.parse(accessToken)
      Header = jwt.getHeader();
      JWTClaimsSet jwtClaimSet = jwt.getJWTClaimsSet();
      

      【讨论】:

      • 谢谢。我看到nimbus-jose-jwt 也在jwt.io的主页上被背书了
      • 这适用于 nimbus JWT,而不是 spring Jwt
      猜你喜欢
      • 2016-02-09
      • 2016-07-13
      • 2018-09-25
      • 2023-03-31
      • 2020-01-19
      • 1970-01-01
      • 2022-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多