【问题标题】:Accessing JWT Token from a Spring Boot Rest Controller从 Spring Boot Rest Controller 访问 JWT 令牌
【发布时间】:2019-07-21 09:55:04
【问题描述】:

我正在使用 Spring Boot 实现 REST API,并使用 JWT 和 Oauth 2 保护它。

我对身份验证和生成访问令牌没有任何问题。

当用户发出请求时,我想从控制器访问其 JWT 令牌。

@RequestMapping(value = "/users", method = RequestMethod.GET)
public List<AppUser> getUsers(OAuth2Authentication auth) {
    logger.info("CREDENTIALS:" + auth.getCredentials().toString());
    logger.info("PRINCIPAL:" + auth.getPrincipal().toString());
    logger.info("OAuth2Request:" + auth.getOAuth2Request());
    logger.info("UserAuthentication:" + auth.getUserAuthentication());
    return userService.findAllUsers();
}

我尝试了类似上面的方法,但无法访问令牌,我只得到用户名。有没有办法在 Spring Boot 中实现这一点?

任何帮助将不胜感激。

【问题讨论】:

    标签: spring spring-boot spring-security jwt spring-security-oauth2


    【解决方案1】:

    鞑靼人,

    UI 是否在请求中将令牌作为标头发送?如果是这种情况,那么您可以在方法中使用 @RequestHeader 注释获取该值

    @RequestMapping(value = "/users", method = RequestMethod.GET)
    public List<AppUser> getUsers(OAuth2Authentication auth, @RequestHeader (name="Authorization") String token) 
    

    注意:对于此示例,Authorization 是包含令牌的标头名称,这可以是自定义标头名称。

    干杯!

    【讨论】:

      【解决方案2】:

      Karl 提供的答案应该可以解决您的问题。

      除了那个答案,你可以使用下面的方法,在代码的任何地方访问令牌

      public static String getToken() {
          String token = null;
          var authentication = SecurityContextHolder.getContext().getAuthentication();
          if (authentication != null) {
            token = ((OAuth2AuthenticationDetails) authentication.getDetails()).getTokenValue();
          }
          return token;
        }
      

      【讨论】:

      • OAuth2AuthenticationDetails 已弃用
      • @OsamaSbieh 你能提供一个链接显示最新的(2.4.0.RELEASE)已被弃用吗?查看 Maven 存储库并深入了解 JAR,这似乎不是真的。只有 ImplicitGrantService 被弃用,因为它被发现是不安全的,并且正在为未来的版本重新设计,因此可以正确构建和尊重隐式授权类型。
      • 只是为了投光,是的,它已被弃用 github.com/spring-projects/spring-security-oauth/blob/…
      猜你喜欢
      • 2021-09-04
      • 2022-01-14
      • 2017-02-06
      • 2021-03-12
      • 2020-03-01
      • 2019-12-08
      • 2019-12-08
      • 2015-05-06
      • 2019-11-29
      相关资源
      最近更新 更多