http://user:pass@host.com身份验证是如何工作的?

6
有人能解释一下如何进行http://user:pass@host.com身份验证吗?浏览器是否会发送经过base-64编码的user:pass作为Authorization头信息?
我在Chrome开发者工具中打开了网络控制台,并尝试请求http://user:pass@stackoverflow.com,但并未看到添加Authorization头信息。
我对浏览器如何在URL前面使用user:pass@方式发送密码非常好奇。

3
这只是授权标头。我不知道Chrome是如何实现的,但是Firefox会检查请求中是否要求身份验证,如果不需要,它会警告您:“您即将使用用户名“user”登录到“stackoverflow.com”网站,但该网站不要求身份验证。这可能是一种欺骗行为。“stackoverflow.com”是您要访问的网站吗?” 然后它要么[是]删除认证详细信息,要么[否]中止请求。所以,除非您有一个带有授权的站点,否则您不会看到这些头文件。 - Chris Morgan
1个回答

5
要检查标头,您需要针对需要身份验证的服务器进行测试。只有在服务器要求时,客户端才会发送任何Authorization标头,因为客户端不知道服务器需要哪种身份验证方法(基本或摘要)。

HTTP认证需要两个请求:

首先,发送一个没有任何Authorization头的请求。然后服务器会响应一个WWW-Authenticate,告诉客户端如何进行身份验证。这包括领域名称和身份验证方法(仍然是基本或摘要)。

然后客户端发送一个带有额外Authorization头的新请求。在基本认证的情况下,此头部只是user:pass base64编码,正如您所说:

Authorization: Basic dXNlcjpwYXNz

现在密码在传输过程中是可见的,除非您使用 https。更好的选择是使用 摘要身份验证,其中 WWW-AuthenticateAuthorization 的内容最好由 维基百科文章 解释。 :)

谢谢 - 这个答案让我找到了这个例子:https://gist.github.com/neolitec/8953607 - Dazed

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