spring-security JWT和Spring安全性

xoefb8l8  于 2022-11-11  发布在  Spring
关注(0)|答案(1)|浏览(250)

我已经使用Sping Boot 和Spring Security构建了一个REST服务来进行身份验证。我对Spring Boot和Spring Security都很陌生。我已经在一个JAR文件中创建了一个身份验证模块。前端客户端向身份验证模块发送一个带有用户名和密码的请求。身份验证模块然后根据DB验证用户的详细信息。如果验证成功,则创建JWT并将其发送回客户端。用户名和角色被编码到JWT中。然后,当从构建在单独JAR文件中的其他REST服务端点请求资源时,使用JWT来验证用户。有几件事我不太确定。
在SpringSecurity中,是否为每个用户创建了一个身份验证对象,以便可以同时对多个用户进行身份验证,或者是每次进行一次身份验证,但只能有一个用户登录?
身份验证对象的有效期有多长?在身份验证模块中创建JWT后,我应该成功“注销”/删除身份验证,还是在请求完成后由它自己处理?对于资源端点(而不是身份验证端点)验证JWT后,是否有方法在身份验证对象中设置身份验证成功?同样,在验证JWT之后,我是否可以在身份验证对象中设置角色?
我的代码基于这个示例https://auth0.com/blog/securing-spring-boot-with-jwts/。我将其拆分为不同的JAR,用于JWT的身份验证和验证(我在资源端点中进行验证)。我还添加了JDBC身份验证,而不是内存身份验证。

yqyhoc1h

yqyhoc1h1#

在SpringSecurity中,是否为每个用户创建了一个身份验证对象,以便可以同时对多个用户进行身份验证,或者是每次进行一次身份验证,但只能有一个用户登录?
当然可以同时验证多个用户!
验证对象的有效期有多长?当JWT在验证模块中创建后,我应该成功“注销”/删除验证,还是在请求完成后由它自己处理?
您将服务编写为REST,如果您希望保持“清教徒”REST,则应将身份验证配置为无状态,这意味着在处理请求时将删除Authentication对象。这不会影响JWT标记的有效性,如果需要,您可以设置JWT标记的过期时间。
如何使用“Java config”使REST无状态:

@Configuration
public static class RestHttpConfig extends WebSecurityConfigurerAdapter
{
    @Override
    protected void configure(HttpSecurity http) throws Exception
    {
        http
            .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS);
        // and the rest of security config after this

对于资源端点(而不是身份验证端点),是否有一种方法可以在验证JWT后在身份验证对象中设置身份验证成功?类似地,是否可以在验证JWT后在身份验证对象中设置角色?

  • 在 * 验证令牌后,我使用类似于以下代码:
Collection<? extends GrantedAuthority> authorities = Collections.singleton(new SimpleGrantedAuthority("ROLE_JWT"));
Authentication authentication = new PreAuthenticatedAuthenticationToken(subject, token, authorities);
SecurityContextHolder.getContext().setAuthentication(authentication);

通过使用至少一个角色(授权)构造身份验证对象,它被标记为“成功”(已验证)。

相关问题