当服务器允许通过基本HTTP身份验证进行访问时,浏览器的预期体验是什么?
我通常只使用curl执行此操作:
curl -u myusername:mypassword http://somesite.com
它工作得很好.但是,现在我无法访问curl(长篇故事),如果可能的话,我想从Web浏览器中进行操作.
我认为Basic Auth应该工作的方式是 - 我输入我想要的网址,服务器然后决定我没有被授权,返回响应代码401,我输入我的用户名和密码到提示符.如果它是正确的,页面加载!
但是,在somesite.com上,我根本没有获得授权提示,只是一个页面上写着我没有被授权.有些网站没有正确实现Basic Auth工作流程,还是我还需要做其他事情?
为了帮助每个人避免混淆,我将分两部分重新提出问题.
首先:"如何使用BASIC auth在浏览器中进行经过身份验证的HTTP请求?" .
在浏览器中,您可以通过等待提示来进行http基本身份验证,或者如果您遵循以下格式则通过编辑URL: http://myusername:mypassword@somesite.com
注意:如果你安装了命令行和curl,问题中提到的curl命令就完全没问题了.;)
参考文献:
https://en.wikipedia.org/wiki/Basic_access_authentication#URL_encoding
https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax
https://tools.ietf.org/html/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.
第二个真正的问题是"但是,在somesite.com上,我根本没有获得授权提示,只是一个页面说明我没有被授权.有些网站没有正确实现Basic Auth工作流程,或者有什么东西否则我需要做什么?"
curl文档说该-u
选项支持许多身份验证方法,Basic是默认方法.
你有没有尝试过 ?
curl somesite.com --user username:password
您可能在浏览器中缓存了旧的无效用户名/密码.尝试清除它们并再次检查.
如果您使用IE并且somesite.com位于您的Intranet安全区域中,则IE可能会自动发送您的Windows凭据.
如果服务器正在发送401响应代码但没有正确设置WWW-Authenticate标头,你也可以得到这个 - 我应该知道,我刚刚修改了自己的代码,因为VB应用程序没有弹出身份验证提示.
如果请求标头中没有提供凭据,则以下是IE提示用户输入凭据并重新提交请求所需的最小响应.
Response.Clear(); Response.StatusCode = (Int32)HttpStatusCode.Unauthorized; Response.AddHeader("WWW-Authenticate", "Basic");
您可以使用Postman chrome插件。它使您能够为每个请求选择所需的身份验证类型。在该菜单中,您可以配置用户和密码。邮递员将自动将配置转换为身份验证标头,该标头将与您的请求一起发送。