HTTP基本认证-什么's预期的web浏览器体验?

当服务器允许通过基本HTTP身份验证访问时,在浏览器中预期的体验是什么?

暂时忽略web浏览器,下面是如何使用curl创建一个基本认证请求:

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

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

然而,在somesite.example上,我根本没有得到授权提示,只是一个页面说我没有被授权。是否有些站点没有正确地实现基本认证工作流,或者还有其他需要做的事情?

479728 次浏览

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

如果你正在使用IE并且somesite.example在你的Intranet安全区域内,IE可能会自动发送你的Windows凭证。

WWW-Authenticate头

如果服务器发送了401响应码,但没有正确设置WWW-Authenticate报头,也可能会出现这种情况——我应该知道,我刚刚在自己的代码中修复了这个问题,因为VB应用程序没有弹出身份验证提示。

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

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

为了帮助大家避免混淆,我将把这个问题分成两部分。

第一:“如何在浏览器中使用BASIC认证进行HTTP请求验证?”

在浏览器中,您可以先通过等待提示符来进行HTTP基本身份验证,或者如果您遵循以下格式,则可以编辑URL: http://myusername:mypassword@somesite.example

注意:如果你安装了命令行和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.example上,我根本没有得到授权提示,只是一个页面说我没有被授权。是否有些站点没有正确地实现基本认证工作流,或者我需要做其他事情?

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

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

你试过吗?

curl somesite.example --user username:password