【问题标题】:Spring remember-me with custom authentication provider带有自定义身份验证提供程序的 Spring 记住我
【发布时间】:2014-10-13 17:23:28
【问题描述】:

我想为我的应用程序实现记住我的服务。我面临的主要问题是我正在使用自定义身份验证提供程序。它使用第三方应用程序进行身份验证。我无法直接访问他们的数据库。

我检查了这个Link,它告诉 UserDetailService 的实现对于 userauthenticxation 服务是强制性的。不幸的是,我无法做到这一点。

我也检查了这个Link,它说你也可以实现一个customRememberMeServices。但我不确定这是如何完成的。它只是传递一个请求和一个没有凭据的响应。

由于我的理解有限; spring 将用户名和密码存储在令牌中

 base64(username + ":" + expirationTime + ":" +
         md5Hex(username + ":" + expirationTime + ":" password + ":" + key))

username:          As identifiable to the UserDetailsService
password:          That matches the one in the retrieved UserDetails
expirationTime:    The date and time when the remember-me token expires,
                   expressed in milliseconds
key:               A private key to prevent modification of the remember-me token

有没有办法从这个令牌中检索密码?如果不是,我还能如何达到同样的效果?

【问题讨论】:

    标签: java spring authentication spring-security


    【解决方案1】:

    没有。令牌是单向哈希。关键是密码用于创建令牌,以后可以在用户再次连接时使用相同的数据进行验证。如果您无法从数据库中读取密码,则不能直接使用此方法。您可以为每个用户创建一个伪造的随机密码并将其存储在您有权访问的数据库中,然后实现一个 UserDetailsService 来加载它。

    或者,您可以使用替代的"persistent token" 实现,它将实际令牌存储在数据库中,而不是从唯一的用户数据重建它。

    【讨论】:

    • 感谢您的回复。但 需要用户详细信息服务。唯一的区别是令牌的存储。 rt ?.. 假设我要重新实现 rememeberme 服务的 autoLogin 方法,我可以从请求中检索用户名吗?
    • 不幸的是,我不能使用假密码解决方案,因为第三方应用程序也作为登录的一部分被初始化,所以除了身份验证之外,一些上下文初始化也在第三方应用程序中完成,只能完成使用原始密码
    猜你喜欢
    • 2023-03-05
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 2017-11-21
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    相关资源
    最近更新 更多