【问题标题】:Spring Security - What does JWT offer me?Spring Security - JWT 为我提供什么?
【发布时间】:2018-09-13 01:02:11
【问题描述】:

我正在考虑让我的应用程序更安全,并了解正在发生的一切。

我使用 Spring Boot 登录。此登录调用 UserDetailsS​​ervice 实现,如下所示:

   public UserDetails loadUserByUsername(String username)
        throws UsernameNotFoundException {

    User user = userRepository.findByUsername(username);

    if (user.getUsername().isEmpty()) {
        throw new UsernameNotFoundException(
                "No user found with username: "+ username);
    }

    String role;

    if (user.getUserType().contains("Gp")){
        role = "ROLE_GP";
    }

    else if(user.getUserType().contains("Patient")){
        role = "ROLE_PATIENT";
    }

    else {
        role = "ROLE_ADMIN";
    }

    boolean enabled = true;
    boolean accountNonExpired = true;
    boolean credentialsNonExpired = true;
    boolean accountNonLocked = true;
    return  new org.springframework.security.core.userdetails.User
            (user.getUsername(),
                    user.getPassword(), enabled, accountNonExpired,
                    credentialsNonExpired, accountNonLocked,
                    getAuthorities(Arrays.asList(role)));
}

private static List<GrantedAuthority> getAuthorities (List<String> roles) {
    List<GrantedAuthority> authorities = new ArrayList<>();
    for (String role : roles) {
        authorities.add(new SimpleGrantedAuthority(role));
    }
    return authorities;
}

这会为我创建一个包含用户角色的会话,以便我可以配置 WebSecurityConfigurerAdapter 等。

所以我的问题是使用 JWT 添加过滤器到底有什么作用? Spring Security 是否已经默认执行这些操作,因为我所做的已经创建了一个授权和经过身份验证的用户。

谢谢。

【问题讨论】:

  • 我在问题中没有看到与 JWT 相关的代码。
  • 没有。问题是,JWT 会添加什么?已经回答了。

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


【解决方案1】:

更高层次:

你所取得的成就是statefull authentication。虽然 JWT 为您的应用程序提供了无状态身份验证(无需创建/销毁任何会话。每个请求都携带一个令牌来访问资源。)。虽然,使用 JWT,您也可以进行有状态的身份验证。

技术上:

在这两种方法中,最终结果是相同的。主要区别在于,在您的方法中,您负责对用户进行身份验证并提供权限。在 JWT 中,对用户进行身份验证的责任属于称为 Authorization server 的第三方。在您的应用程序中,您只需验证 JWT 并根据权限,允许或拒绝对所需资源的访问。

根据您的要求和架构,您可以选择任何一种。在微服务世界中,无状态方法更为常见且最适合。

所以我的问题是,使用 JWT 添加过滤器到底有什么作用? Spring Security 是否默认执行这些操作

取决于你如何实现它。通常 JWT 过滤器首先通过签名或加密验证令牌,然后从 JWT 读取用户权限。所以不需要任何 userDetails 服务的实现。

【讨论】:

  • 那么安全性没有区别?
  • 我刚刚更新了答案。请看看,让我知道你还想要什么?
猜你喜欢
  • 2019-09-23
  • 1970-01-01
  • 2019-10-05
  • 1970-01-01
  • 2014-07-23
  • 2016-03-22
  • 1970-01-01
  • 2014-04-24
  • 1970-01-01
相关资源
最近更新 更多