fis*_*one 7 authentication webserver http basic-authentication http-status-code-401
我们的网络应用程序具有用户/密码身份验证。它在 Web 服务器上运行,该服务器本身通过 HTTP 基本身份验证进行保护。这只是一个临时解决方案/解决方法。Web 应用程序的身份验证将来就足够了,但目前 Web 服务器基本身份验证根本阻止访问 Web 应用程序。
如果未在应用程序级别进行身份验证,Web 应用程序将返回状态代码 401。标WWW-Authenticate头定义了不同的领域,因此浏览器不会在 Web 服务器和 Web 应用程序身份验证之间混淆:如果我们没有定义不同的领域,则一旦应用程序的 401 到达,浏览器就会丢弃 Web 服务器凭据。
到目前为止,一切都很好。然而,我们的应用程序有自己的身份验证对话框。对于 XHR 请求,我们希望自己处理 401 状态,并且需要阻止浏览器的内部基本身份验证窗口。有一个简单的技巧:只需调整身份验证标头 ( WWW-Authenticate) 即可使用自定义身份验证方法:
WWW-Authenticate: CustomBasic realm="myapp"
Run Code Online (Sandbox Code Playgroud)
Web 服务器返回:
WWW-Authenticate: Basic realm="webserver"
Run Code Online (Sandbox Code Playgroud)
这适用于 Firefox,但不适用于 Chrome。Chrome 在使用时会忽略领域CustomBasic,并丢弃领域“webserver”的凭据(用户/密码),就好像我们根本没有定义领域“myapp”一样。
你知道为什么吗?您是否知道满足以下要求的解决方案:
是的,我知道我们可以通过在应用程序级别使用不同的 HTTP 状态代码并分别处理它们来简单地解决此问题。但如果可能的话,我想保留正确的状态代码 401。这也可能是一个有效的用例,例如,如果您有两个可通过同一主机上的两个不同 URL 路径访问的 Web 应用程序。
小智 0
绕过此限制的一种方法是使用ModHeader等插件来定义值为“Basic <...>”的“Authorization”标头,其中“<...>”字符串应计算为 BASE64(username:密码)。
例如,如果您的凭据是“myuser”/“mypsw”,则应将“Authorization”标头设置为等于“Basic bXl1c2VyOm15cHN3”:
$ echo -n "myuser:mypsw" | base64
bXl1c2VyOm15cHN3
Run Code Online (Sandbox Code Playgroud)
但请记住,这仅适用于本地开发目的,因为有非常有效的安全原因导致基本身份验证被弃用。
| 归档时间: |
|
| 查看次数: |
2007 次 |
| 最近记录: |