HTTP基本身份验证-预期的Web浏览器体验如何?


255

当服务器允许通过基本HTTP身份验证进行访问时,Web浏览器将带来什么样的体验?

暂时忽略网络浏览器,以下是创建基本身份验证请求的方法curl

curl -u myusername:mypassword http://somesite.com

但是在Web浏览器中呢?我在某些网站上看到的是访问URL,然后服务器返回响应代码401。然后浏览器显示用户名/密码提示。

但是,在somesite.com上,我根本没有得到任何授权提示,只有一个页面显示我没有得到授权。某个站点是否未正确实施基本身份验证工作流,或者我还需要做其他事情吗?


您确定使用基本身份验证而不是摘要吗?
b_erb 2010年

不确定是否有区别,除非您问我是否使用base-64编码。如果我以编程方式执行该操作,则可以,但是curl为我完成了该操作。
bpapa 2010年

您可以从WWW​​-Authenticate响应标头(值:摘要或基本)中找出使用哪种身份验证。
Kniganapolke 2010年

2
我认为这个问题需要改写。超过一个受访者认为这是关于卷曲而不是浏览器的问题。
LS

当您使用“授权”一词时,您是指“身份验证”吗?
塔伦

Answers:


160

为了帮助大家避免混淆,我将分两部分重新阐述这个问题。

第一:“如何使用BASIC身份验证通过浏览器发出经过身份验证的HTTP请求?”

在浏览器中,您可以首先通过等待提示出现来进行http基本认证,或者如果遵循以下格式,则可以通过编辑URL来进行: http://myusername:mypassword@somesite.com

注意:如果您已经安装了命令行和curl,那么问题中提到的curl命令就可以了。;)

参考文献:

同样根据CURL手册页面https://curl.haxx.se/docs/manual.html

HTTP

  Curl also supports user and password in HTTP URLs, thus you can pick a file
  like:

      curl http://name:passwd@machine.domain/full/path/to/file

  or specify user and password separately like in

      curl -u name:passwd http://machine.domain/full/path/to/file

  HTTP offers many different methods of authentication and curl supports
  several: Basic, Digest, NTLM and Negotiate (SPNEGO). Without telling which
  method to use, curl defaults to Basic. You can also ask curl to pick the
  most secure ones out of the ones that the server accepts for the given URL,
  by using --anyauth.

  NOTE! According to the URL specification, HTTP URLs can not contain a user
  and password, so that style will not work when using curl via a proxy, even
  though curl allows it at other times. When using a proxy, you _must_ use
  the -u style for user and password.

第二个真正的问题是“但是,在somesite.com上,我根本没有得到任何授权提示,只是一个页面显示我未获得授权。某站点未正确实施Basic Auth工作流,或者是否存在某些问题?还有我需要做的吗?”

curl文档说该-u选项支持多种身份验证方法,默认为Basic。


3
问题是关于curl的问题,它不是浏览器。
雷·巴克斯特

26
您可能尚未完全阅读问题,因为它只是在curl命令下显示:“但是,现在我无法访问curl(长话),如果可能的话,我想从Web浏览器中进行操作”。;)
Nicocube 2015年

3
我完全同意卷曲可以正常工作,我个人定期使用它,但是问题不在于卷曲……
Nicocube

4
询问者想知道为什么要认证。在浏览器中不起作用。问题不在于cURL。
LS

68

你有没有尝试过 ?

curl somesite.com --user username:password

13
@daronwolff您只切换了参数位置,并用--user替换了-u(这只是长期的做法),但除此之外,您还精确地写了OP在他的问题中已经写的内容
Murmel

3
询问者想知道为什么要认证。在浏览器中不起作用。问题不在于cURL。
LS

15

您可能在浏览器中缓存了旧的无效用户名/密码。尝试清除它们,然后再次检查。

如果您使用的是IE,并且somesite.com位于Intranet安全区域中,则IE可能会自动发送Windows凭据。


8

WWW-Authenticate标头

如果服务器发送的是401响应代码,但未正确设置WWW-Authenticate标头,则您也可能会收到此消息-我应该知道,我已经将其固定在自己的代码中,因为VB应用程序没有弹出身份验证提示。


6

如果请求标头中没有提供凭据,则以下是IE提示用户输入凭据并重新提交请求所需的最小响应。

Response.Clear();
Response.StatusCode = (Int32)HttpStatusCode.Unauthorized;
Response.AddHeader("WWW-Authenticate", "Basic");

5

您可以使用Postman chrome插件。它使您能够为每个请求选择所需的身份验证类型。在该菜单中,您可以配置用户和密码。邮递员将自动将配置转换为身份验证标头,该标头将与您的请求一起发送。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.