如何通过网站上的会话管理多个状态?

How to manage multiple states with session on a website?

对于以下情况,非常感谢任何帮助:

Amazon.com 如何管理不同级别的身份验证,一次是在您访问网站时,第二次是在您访问 "Your Account"-> "Login & Security" 时作为安全功能?

用户登录(即验证)网站并且 7 天没有 activity。用户重新访问该网站,然后要求用户再次进行身份验证。这可以使用 cookie 实现,但由于安全问题,它是使用服务器端的会话令牌实现的。 7 天后,当浏览器提供过期令牌时,用户将面临重新验证的挑战。

现在,新的要求是如果用户登录并访问 "Your Account" 页面,

  1. 如果用户仍在 "Your Account" 页面上并且 10 分钟内没有 activity,则应要求用户重新进行身份验证。

或.

  1. 如果用户离开 "Your Account" 页面并在 10 分钟后重新访问 "Your Account" 页面,则应要求用户重新进行身份验证。

所以有了token,我只能管理inactivity的一个时间段,如何处理多个状态,即状态(7天)和部分状态(10分钟)

处理这种情况的行业惯例是什么?不想将 cookie 用作安全问题。由于使用 SSO 提供程序进行身份验证,因此使用数据库将是最后的选择。

--大卫.

如何处理这个问题将归结为当前到期会话令牌逻辑的实现细节。

一种常见的方法是将会话令牌存储在数据库或 in-memory 缓存中。如果是这种情况,您可以简单地添加一个新列来指示用户何时打开帐户页面。

例如,您的新列可以命名为 accountSettingsStartTime。通常它没有任何价值,但当用户导航到帐户页面时,它会填充当前时间。当用户离开帐户页面时,您可以将其清除。然后,当您检查安全令牌时,您只需检查标准的 7 天有效期以及检查 accountSettingsStartTime 列并确保它在最后 10 分钟内。

或者,您可以在用户导航到帐户设置时为他们提供一个有效期为 10 分钟的全新会话令牌,并强制使用 that 令牌进行操作涉及账户设置。然后,您可以在更改帐户设置时检查该令牌,并要求用户 re-authenticate 是否已过期(并使他们的标准 7 天令牌无效)。当然,这需要客户端付出更多的努力。

正如他们所说,给猫剥皮的方法不止一种 :)