【问题标题】:Remember user session for several weeks?还记得几个星期的用户会话吗?
【发布时间】:2013-07-14 09:07:17
【问题描述】:

如果我没记错的话,像谷歌这样的公共服务通常会提供 2 周内避免登录过程的能力。

这样,即使标签页关闭、浏览器甚至操作系统重启,用户仍然可以作为主题访问网页,而无需重新登录。

问题是:

  1. 要在 Apache Shiro 中实现这一点,它只是关于会话超时,不是吗,类似于 globalSessionTimeout ?这样,会话将被存储并保持活动状态 2 周,然后才会自行超时。
  2. 这---- 与 Shiro 的“记住我”功能相同,身份验证记住 是有区别的,对吗?

【问题讨论】:

    标签: shiro


    【解决方案1】:

    Shiro 或 Web 会话将保留身份验证状态,即,如果用户在其他状态(会话属性等)之外实际证明了他们的身份。

    Shiro 中的“记住我”功能只设置了一个身份 cookie,告诉服务器最终用户可能是谁,但这个 cookie 保留身份验证状态. Shiro 的文档中清楚地解释了这两种不同方法的原因:Remembered vs. Authenticated

    我不确定 Google 如何实施他们的解决方案,但我相当肯定它不是基于会话的。谷歌的目标是尽可能地实现服务器无状态——例如,为 GMail 维护数百万个会话是他们可能宁愿不处理的技术开销。 GMail 可能会在browser local storage(或一些自定义等效项)中保留身份验证状态,以确保所有状态都在客户端中。

    无论如何,如果我不得不猜测,它可能是这样的:

    当您通过服务器进行身份验证时,Google 可能会获取当时有关您和您的计算机的大量信息(时间、IP 地址、浏览器信息、用户 ID 等)并计算加密哈希(又名“摘要”)并将哈希值设置为 cookie 或浏览器本地存储。

    下次访问服务器时,他们可能会查看该值,对当前请求中的相关信息执行相同的加密哈希,如果他们计算的哈希与 cookie 中的哈希匹配,他们可以确定它仍然是您在特定计算机上,并允许您在不登录的情况下使用该应用程序。

    这种行为就像 Shiro Remember Me ++。他们在不使用会话的情况下记住用户是谁,而且还可以记住其他信息,这些信息可以让他们更加确定用户确实是他们所期望的人。

    要使用 Shiro 近似相同的行为,是的,您必须将会话时间延长 2 周。不同之处在于,我对 Google 解决方案的猜测根本不需要任何服务器状态,而 Sessions 则需要。

    【讨论】:

    • 对此我感到非常兴奋。但我无法搜索出 Shiro Remember Me ++ 的东西。 Shiro 中是否已经提供此功能,或者我仍然需要手动收集、散列和做 cookie 的东西?
    • 嗨 @AlbertKam 这在 Shiro 中不可用 - 如果您实施它,我们希望对项目做出任何贡献!
    • 嗨@bertie 根据 Les Hazlewood,它似乎是 HMAC 身份验证。您可以通过在安全管理器中添加 HMACRealm 来执行相同操作。
    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    相关资源
    最近更新 更多