OpenId + 记住我/保持登录状态

Posted

技术标签:

【中文标题】OpenId + 记住我/保持登录状态【英文标题】:OpenId + remember me / staying logged in 【发布时间】:2010-10-31 07:13:44 【问题描述】:

我有一个问题,关于如何/什么是使用 OpenId 的最佳方法以及提供保持登录的能力。

例如,如果我查看 ***,我已经使用 Google 登录,如果我通过浏览器关闭并返回,它仍然让我保持登录状态。

但是,我没有登录 Google,而且我已从有权访问您的 Google 帐户的授权服务列表中删除 ***。我天真地期望***会提示我再次登录,但事实并非如此。

所以我的问题是,关于 OpenId 和跨会话记住经过身份验证的用户的最佳做法是什么?

【问题讨论】:

【参考方案1】:

OpenID 仍然很新,一些依赖方正在尝试新的不同方法来实现 OpenID。 OpenID 基金会主持的一项工作正在进行中best practices document for relying parties。特别是,他们在last section 中解决了 cookie 和会话长度的问题。为了让用户的生活更轻松,使用持久的 claim_id cookie 而不是持久的会话 cookie 绝对是一个有趣的想法——他们只需要注销他们的 OP 并关闭浏览器。

就我个人而言,我发现您在 *** 上描述的行为非常自然。如果 OpenID 不在图片中,并且您在两台具有持久 cookie 的不同计算机上登录了用户名/密码网站(一种非常常见的情况),并且您在其中一个上更改了密码,如果另一个我不会感到惊讶计算机仍然让我登录。您可以称其为安全漏洞,但这仍然是正常做法。事实上,Gmail 最近在您的收件箱屏幕底部添加了一个显示,告诉您您登录的其他位置,并让您有机会使其会话 cookie 无效。

我建议任何 RP 都可以采用类似的方法,而不管身份验证方法如何。这可能会减轻您的安全顾虑。

【讨论】:

4年后,看看这方面有没有进展? 4年后,是的,我相信有,这里有全面的specs。【参考方案2】:

堆栈溢出可能使用 cookie 将您记住为用户号 xyz 或会话 id 1234。身份验证后,OpenID 与会话不再有任何关系。 SO 无法查看您是否仍在登录 Google,因此这似乎很自然。

【讨论】:

我理解/感谢它使用自己的 cookie,但我希望至少会对 google 进行一些定期检查,因为我已经从针对我的 google 帐户的授权服务列表中删除了堆栈溢出。在这种设置下,当我说我不想在 Google 中发生这种情况时,有人可以很容易地使用我的机器并在堆栈溢出中发布内容。 您已表明您不希望堆栈溢出来验证您的 google 帐户。这不是身份验证,因为您前段时间已经这样做了。无需定期重新登录即可实现您想要的。 问题是,从用户的角度来看,我认为这使得 OpenId 有点矛盾。您可以在一个地方“提供您的登录过程”,但您没有一个地方可以控制哪些站点可以使用它,哪些站点不能使用它。这可能意味着当其他站点实际上保留了您登录的足够信息时,它们就不需要再次对您进行身份验证。无论如何,我的问题并不是针对 SO 本身,而是针对关于 OpenId 和“保持登录”解决方案的推荐最佳实践是什么。

以上是关于OpenId + 记住我/保持登录状态的主要内容,如果未能解决你的问题,请参考以下文章

如何让用户在我的网站上登录数月?

在 Rails 应用程序中实现“记住我”

注销和记住会话的最佳 Worklight 实践

记住 Firebase Unity 游戏中的身份验证

JSON Web 令牌过期和记住我功能

如何使用 apache shiro 永久保持登录状态