OpenID登录机制 - 保持登录状态

4
我正在开发一个PHP网站,想要使用OpenID作为登录机制。我希望实现类似于StackOverflow的行为,也就是只要打开StackOverflow,我就已经登录了。我在StackOverflow上找到了两个相关的问题: OpenId + remember me / staying logged in Sign in with Twitter, and stay signed in (PHP) 我知道应该让用户登录,如果这是他/她第一次登录,应该注册用户并在他/她的系统中设置一个cookie。然而,我的问题是:我应该在cookie中存储什么?用户名/密码组合?那似乎是一个安全问题。另一个问题是我应该在哪里检查cookie?我希望能得到一个简单的教程/代码示例。谢谢。
1个回答

8
这是基本的网络应用程序会话管理,使用cookie和OpenID在此处起初没有区别。
绝对不要在cookie中存储用户名和密码。Cookie充当“持票人令牌”,意味着拥有cookie的人可以进入。在cookie中存储的最好内容是一个难以猜测且任意的密钥,您可以使用该密钥在应用程序的表中查找真实信息。因此,用户出现了一个名为“myappsession”的cookie,其值为“234871nb341adf”,并与您的域名相关联。然后,您的应用程序将在本地数据存储中查找“234871nb341adf”的值,并查看它是否与有效用户相关联。您最好还检查一下该用户到底多久之前在那里等等。如果是有效会话并且在您的时间和使用限制内,则用户会自动登录。
对于RP方面的额外偏执症,您可以利用OpenID的checkid_immediate模式,进行后台调用以查看用户是否仍然登录到他们的IdP。如果没有,那么您至少知道要尝试向哪个提供程序发送他们以进行重新验证,并可以提供更好的用户体验。
如果您想使您的网站真正安全,您应该在HTTPS上进行所有会话,并将您的cookie标记为"Secure"和"HTTPOnly",这在setcookie函数手册页面上有记录:http://php.net/manual/en/function.setcookie.php

非常感谢。由于我很久以前就提出了这个问题,所以我想出了一个类似的解决方案。我很高兴我选择了这种方式 ;) - Alireza Noori
@jricher 是否需要一个 return_to url 来执行 checkid_immediate?有没有一种方法可以“同步”执行,而不是等待提供者回调? - Keven Wang
OpenID 通过浏览器重定向工作,而不是直接的 HTTP 调用,因此您需要等待返回。 - jricher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接