URL嵌入的凭据

时间:2015-09-17 15:48:57

标签: google-chrome http url web http-basic-authentication

Wikipedia says HTTP基本身份验证依赖于Authorization标头来提供从客户端到服务器的凭据。

但也可以在URL中嵌入凭据:

http(s)://<user>:<password>@<host>/<path>

它是由浏览器解释并转换为Authorization标题还是直接发送到服务器?

2 个答案:

答案 0 :(得分:5)

  

但也可以在URL中嵌入凭证

只有当浏览器支持HTTP时才会出错,通常是故意向后兼容浏览器,人们误以为这是个好主意。

HTTP方案永远不会允许它,尽管URI语法通常允许用户信息。

  

它是由浏览器解释并转换为Authorization标头的东西。

是。如果服务器发送了401,则浏览器将使用该用户名和密码进行回复。至少有一个曾经先发制人地试图使用Basic,这在现有的坏主意之上显然是一个坏主意。

答案 1 :(得分:4)

如果您输入包含凭据的网址,则用户体验因浏览器和浏览器设置而异。

说你要求http://example.com/index.html

浏览器请求example.com,忽略第一个请求的凭据。服务器给出401响应,声明需要基本身份验证。 然后根据您可能遇到的浏览器和配置

  • 用于凭据的非填充用户名/密码提示,忽略用户/传递
  • 提示用户询问是否以user身份登录http://example.com/index.html(Firefox)
  • 使用凭据自动登录。

然后,Authorization标题会向 $(".person").click(function(){ var lname = $(this).children("lname").val(); $.ajax({ url:'profile', type: 'GET', data: 'lname' : lname, dataType: 'json', success: function(result){ } }); } 发出第二个请求。

在给定此类URL时自动登录的任何其他客户端都使用Authorization标头,基本身份验证无法正常工作。