任何人都可以解释http://user:pass@host.com身份验证的工作原理吗?浏览器是否发送Authorization
标头,user:pass
是否为base-64编码?
我在Chrome开发者工具中打开了Net控制台,当我发出http://user:pass@stackoverflow.com
请求时,我没有看到Authorization
标题被添加。
我非常好奇浏览器在网址前面使用user:pass@
时如何发送密码。
答案 0 :(得分:3)
要检查标头,您需要针对需要身份验证的服务器进行测试。在服务器请求之前,客户端不会发送任何Authorization
标头,因为客户端将不知道服务器需要哪种身份验证方法(基本或摘要)。
HTTP身份验证在两个请求中完成:
首先,发送没有任何Authorization
标头的请求。
然后,服务器以WWW-Authenticate
响应,告诉客户端如何进行身份验证。这包括领域名称和身份验证方法(同样,这是基本或摘要)
然后,客户端发送一个带有额外Authorization
标头的新请求。对于basic authentication,此标头只是user:pass
base64编码,正如您所说:
Authorization: Basic dXNlcjpwYXNz
现在密码在传输过程中可见,除非您使用的是https。更好的选择是digest authentication,其中WWW-Authenticate
和Authorization
的内容最好由wikipedia article解释。 :)