智威汤逊和Spring Security

智威汤逊和Spring Security

问题描述:

我已经使用Spring Boot和Spring Security进行了REST服务来进行身份验证。我对Spring Boot和Spring Security都很陌生。我在一个JAR文件中创建了一个验证模块。前端客户端向认证模块发送带有用户名和密码的请求。验证模块然后根据数据库验证用户的详细信息。如果身份验证成功,则会创建JWT,然后将其发送回客户端。用户名和角色被编入JWT。 JWT随后用于验证用户何时从其他REST服务端点请求资源,这些端点是在单独的JAR文件中构建的。有几件事我不确定。智威汤逊和Spring Security

在Spring Security是没有为每个用户创建一个认证对象,以便多个用户可以在同一时间进行身份验证,或者一个认证,每次做,只有一个用户可以登录?

多久是有效的认证对象?在认证模块中创建JWT时,我应该“注销”/删除认证成功吗?还是在请求完成后自行处理?对于资源端点(不是身份验证端点),是否有一种方法可以在验证JWT后在身份验证对象中设置身份验证成功?同样,一旦JWT验证,我可以在验证对象中设置角色吗?

我根据这个例子https://auth0.com/blog/securing-spring-boot-with-jwts/我的代码。我已经将它分成了不同的JAR,用于验证和验证JWT(我正在资源端点进行验证)。我还添加了JDBC认证,而不是内存认证。

+0

令牌过期,会话到期,撤消令牌......您可能会发现,仅仅使用传统饼干就像在这个Spring博客中提倡的那样简单。 https://spring.io/blog/2015/01/12/the-login-page-angular-js-and-spring-security-part-ii#help-how-is-my-application-going-to-规模。另外http://cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions/ –

在Spring Security是有每个 用户创建一个认证对象,以便多个用户可以在同一时间进行身份验证或者是 一个验证,每次做,只有一个用户可以登录?

当然,多个用户可以在同一时间进行身份验证!

多久是有效的认证对象?我应该 “注销” /删除认证成功时,JWT一直认证模块中创建 或当请求完成后,将照顾它本身 ?

你写你的服务是休息的,如果你想保持“清教徒”放心,你应该配置的认证是无国籍,这意味着,当请求已被处理的对象Authentication被删除。这不会影响JWT令牌的有效性,如果您愿意,可以设置JWT令牌的过期时间。

如何使REST无状态的“Java配置”:

@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验证后在 认证对象中设置角色吗?

我使用类似下面代码后验证令牌的:

Collection<? extends GrantedAuthority> authorities = Collections.singleton(new SimpleGrantedAuthority("ROLE_JWT")); 
Authentication authentication = new PreAuthenticatedAuthenticationToken(subject, token, authorities); 
SecurityContextHolder.getContext().setAuthentication(authentication); 

通过与至少一个角色(授权)构造认证对象时,它被标记为“成功”(认证)。

+0

感谢您的输入。是否有为每个用户创建一个验证管理器或有一个身份验证每个用户都由用户名'auth.getUsername()'分隔的管理器?为了使认证无状态,请在处理请求后运行类似于http://*.com/a/33032486/2420986的内容。 – g3blv

+0

@ g3blv每个系统通常只有一个'AuthenticationManager',它负责_authenticate_用户的整体责任,它不存储用户。关于无状态,更新(编辑)。 – holmis83