当服务器允许通过基本HTTP身份验证访问时,在web浏览器中期望的体验是什么?
暂时忽略web浏览器,下面是如何使用curl创建一个Basic Auth请求:
curl -u myusername:mypassword http://somesite.example
但是在Web浏览器中呢?我在一些网站上看到的是,我访问URL,然后服务器返回响应代码401。然后浏览器显示用户名/密码提示。
然而,在某些网站上。例如,我根本没有得到授权提示,只有一个页面说我没有获得授权。是否有些站点没有正确地实现基本认证工作流,或者还有其他需要做的事情?
为了帮助大家避免混淆,我将把这个问题分成两部分。
第一个问题:“如何使用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是默认的。