我刚开始在我的网站上集成OpenID。我看到的所有示例都将声明的ID存储在cookie中。它是如何安全的?
例如,myopenid.com会返回声明的ID,即{username} .myopenid.com
因此,如果黑客知道您声明的ID,他可以轻松破解您的帐户。
当然,在将ID加入cookie并用于身份验证之前,您需要对ID进行加密/ md5,但这就像存储没有密码的用户名一样!
更新
现在我想到了更多,我意识到,你需要登录OpenID提供商,所以即使黑客获得用户名,他仍然需要提供商的密码才能登录。我是否正确?
更新2 不,更新1不正确:)我的网站无法检查用户是否已成功登录。我收到的只是声称的ID,我只需要相信用户已通过身份验证。这真让人困惑......
答案 0 :(得分:3)
了解用户声称的身份不足以进行身份验证。
实际上,用户必须登录其提供商,才能使用该身份对您的网站进行身份验证。
至于“相信用户已通过身份验证” - 不,您不信任。作为OpenID身份验证的最后一部分,您应该验证身份验证消息是否来自提供程序。有各种安全措施来确保消息是真实的,不变的等。 如果您这样做,您确信您的用户已被提供商正确认证。
现在,由于您不希望每次用户发出请求时都这样做,因此您将会话信息存储在cookie中。但是,您不仅存储声明的标识符(如果您决定存储它),而是存储会话ID - 用户登录时生成的伪随机数。由于它是伪随机数,没有人能猜到它,因此,对声称的标识符本身的知识并不意味着什么。
如果这回答了您的问题,请阅读您喜欢的语言/框架中的会话管理,因为它会告诉您如何轻松实现此类机制,以及它是如何工作的。
总结:将OpenID视为密码验证的替代品。您不需要(也不应该)在cookie中存储登录名和密码,并且您不必存储声明的标识符。同样,您不会每次都验证登录名和密码是否匹配,但请记住该用户已在会话中进行身份验证。