JWT and Spring Security



我已经使用Spring Boot和Spring Security构建了一个用于身份验证的REST服务。我对Spring Boot和Spring Security都很陌生。我在一个 JAR 文件中制作了一个身份验证模块。前端客户端向身份验证模块发送包含用户名和密码的请求。然后,身份验证模块根据数据库验证用户的详细信息。如果身份验证成功,则会创建 JWT,然后将其发送回客户端。用户名和角色编码到 JWT 中。然后,当从单独 JAR 文件中构建的其他 REST 服务终结点请求资源时,JWT 用于验证用户。有几件事我不确定。

在 Spring 安全性中,是否为每个用户创建了一个身份验证对象,以便可以同时对多个用户进行身份验证,还是每次执行一次身份验证并且只能登录一个用户?

身份验证对象的有效期是多久?在身份验证模块中创建 JWT 后,我应该成功"注销"/删除身份验证,还是在请求完成后自行处理?对于资源终结点(不是身份验证终结点),验证 JWT 后,是否有办法在身份验证对象中设置身份验证成功?同样,验证 JWT 后,是否可以在身份验证对象中设置角色?

我的代码基于此示例 https://auth0.com/blog/securing-spring-boot-with-jwts/。我已将其拆分为不同的 JAR,用于 JWT 的身份验证和验证(我正在资源终结点中进行验证)。我还添加了 JDBC 身份验证,而不是内存身份验证。

在 Spring 安全性中,是否为每个对象创建了一个身份验证对象 用户,以便可以同时对多个用户进行身份验证,或者 每次完成一次身份验证,只能登录一个用户?

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

身份验证对象的有效期是多久?我应该 "注销"/删除身份验证成功时 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);

通过构造具有至少一个角色(颁发机构)的身份验证对象,该对象被标记为"成功"(已验证)。

最新更新