如何实现查询字符串认证
Posted
技术标签:
【中文标题】如何实现查询字符串认证【英文标题】:How to implement Querystring authentication 【发布时间】:2010-09-15 17:58:08 【问题描述】:我正在开发一个客户的网站,他们正在向他们的客户发送简报(通过网站管理界面) 时事通讯对每个订阅的收件人/客户都是个人的。 每个收件人/客户也是具有用户名/密码的用户,使他们能够登录网站并管理他们的时事通讯订阅并参与网站社区。p>
这一切都像一个魅力。 现在,我的客户希望在时事通讯电子邮件中添加一个“管理我的订阅”链接,按下该链接后,收件人/客户会自动登录网站,而无需记住用户名和密码。
通过这样的链接可以很容易地解决这个问题:
http://mysite.com/manage.aspx?user=peter&password=hounddog
当然信息不应该是明文,而是以某种方式加密。
然而,这带来了一个问题,因为如果提供有效的用户名和密码,用户可以在网站上进行身份验证的唯一方法。 为了安全起见,密码以哈希值的形式存储在数据库中,因此我无法在链接中插入密码。
在不影响安全性的情况下实现此目的的最佳方法是什么?
【问题讨论】:
【参考方案1】:你能不能插入一个与密码的哈希值捆绑在一起的加密用户名?
我的意思是,将用户名加密和编码为始终为特定长度或在其中包含已知的中断字符,然后附加密码哈希值。这样,您可以轻松地拆分查询字符串,同时仍然对用户名和密码进行安全编码。直接比较哈希值就足够了,未加密、解码的用户名允许访问。
【讨论】:
【参考方案2】:使用包含访问令牌的加密 cookie 怎么样? 此 cookie 将在一个单独的页面成功验证后交付。
这种标记也可以是 URL 查询字符串的一部分。
您也可以考虑使用安全的 https 而不是 http。
【讨论】:
【参考方案3】:如果您希望人们能够在不输入密码的情况下登录,您将必须在一定程度上损害您的安全性。请注意,即使您可以访问密码(如您的示例所示),您也必须将其嵌入到以明文形式传输的邮件消息中。
您可以创建与每个用户和消息关联的 Guid,并将其附加到 URL,并允许其自动登录。
您也许可以隔离权限,以便通过时事通讯 guid 链接登录仅允许用户管理订阅,但仍然需要真正的密码登录才能参与论坛。在这种情况下,如果有人从邮件消息中访问 Guid,那么可能造成的破坏非常有限。
【讨论】:
这是我过去所做的。请记住将 GUID 和用户名映射到单独的表中以上是关于如何实现查询字符串认证的主要内容,如果未能解决你的问题,请参考以下文章