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

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

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

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

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


当前回答

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

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

其他回答

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

如果你使用IE和某些网站。例如,在您的Intranet安全区域,IE可能会自动发送您的Windows凭据。

你试过吗?

curl somesite.example --user username:password

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命令是完全没问题的。;)

引用:

https://en.wikipedia.org/wiki/Basic_access_authentication#URL_encoding https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax https://www.rfc-editor.org/rfc/rfc3986#page-18

也可参考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.

第二个也是真正的问题是“然而,在某个网站上。例如,我根本没有得到授权提示,只有一个页面说我没有获得授权。是某个站点没有正确地实现基本认证工作流,还是我需要做其他事情?”

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