安全上

我刚刚宣布了新消息学习春天安全课程,包括完整的材料集中在新的OAuth2堆栈在Spring Security 5:

>>查看课程

1.概述

本文将展示如何设置记住春天安全的功能- 不是使用标准cookie的方法,但是使用持久性更安全的解决方案

作为一个快速的介绍- Spring可以被配置为在浏览器会话之间记住登录细节。这允许你登录一个网站,然后让它自动登录你在下次访问该网站(即使你已经关闭浏览器在此期间)。

2.两个“记住我”的解决方案

Spring提供了两个略有不同的实现来解决这个问题。都使用的UsernamepasswordauthenticationFilter.,使用钩子调用一个记忆道服务执行。

我们已经覆盖了标准的Remember Me解决方案,只使用一个cookie,在一篇文章。这个解决方案使用一个名为记得我-包含用户名、过期时间和MD5哈希值(含密码)。因为它包含了密码的散列,这种解决方案有潜在的弱点如果cookie被捕获。

记住这一点——让我们看看第二种方法——使用PersistentTokenBasedRememberMeServices将持久登录信息存储在会话之间的数据库表中。

3.前提条件—创建数据库表

首先 - 我们需要在数据库中拥有登录信息 - 我们需要一个表创建来保存数据:

如果不存在persistent_logins (username varchar_ignorecase(100) not null, series varchar(64) primary key, token varchar(64) not null, last_used timestamp not null);

这是启动时自动创建通过以下XML配置(使用内存中的H2 db):

< !——create H2 embedded-database table on startup——>   < / jdbc:嵌入式数据库>

为完整起见,这是持久性设置的方式:

@Configuration @EnableTransactionManagement @PropertySource({"类路径:持久化-h2。}) public class DatabaseConfig {@Autowired私有环境环境;@Bean public DataSource DataSource() {DriverManagerDataSource = new DriverManagerDataSource();dataSource.setDriverClassName (env.getProperty(“jdbc.driverClassName”));dataSource.setUrl (env.getProperty(“jdbc.url”));dataSource.setUsername (env.getProperty(“jdbc.user”));dataSource.setPassword (env.getProperty(“jdbc.pass”));返回数据源;}}

4.Spring安全配置

第一个关键配置是Remember-Me Http配置(注意数据源属性):

< http use-expressions = " true " >… 

接下来 - 我们需要配置实际RememberMeServiceJdbcTokenRepository(也使用the .数据源):

< !——Persistent Remember Me Service——>               

5.饼干

就像我们提到的,标准TokenBasedRememberMeServices在cookie中存储散列用户密码。

这个解决方案PersistentTokenBasedRememberMeServices使用一个用户的唯一系列标识符。这标识了用户的初始登录,并且每次用户在该持久性会话期间都会自动登录时保持常量。它还包含随机令牌每次用户通过持久的remember-me函数登录时都会重新生成。

这种随机生成的序列和令牌的组合是持久的,这使得暴力攻击非常不可能。

6.在实践中

要在浏览器中查看remember me机制,你可以:

  1. 登录请记住我活跃
  2. 关闭浏览器
  3. 重新打开浏览器并返回到相同的页面。刷新。
  4. 您仍将登录

没有记住我活跃,在Cookie到期后,应将用户重定向到登录页面。还记得我,用户现在在新令牌/cookie的帮助下保持登录状态。

您还可以在浏览器中查看cookie,以及数据库中的持久数据(注 - 您可能希望从嵌入的H2实现中切换)。

7.结论

本教程说明了如何设置并配置数据库持久地记住我令牌功能。这也是前一篇文章的后续讨论了基于令牌的标准Cookie功能。当密码详细信息不持久地持续到cookie中,数据库方法更安全 - 但它涉及稍微配置稍微配置。

这个Spring Security REST教程的实现可以在GitHub项目-这是一个基于eclipse的项目,所以它应该很容易导入和运行。

安全底部

我刚刚宣布了新消息学习春天安全课程,包括完整的材料集中在新的OAuth2堆栈在Spring Security 5:

>>查看课程
6注释
最老的
最新
内联反馈
查看所有评论
评论在本文上关闭!