问题描述
我们的Web应用程序具有用户/密码身份验证。它在Web服务器上运行,该服务器通过HTTP Basic Auth进行安全保护。这只是一个临时解决方案/解决方法。将来,Web应用程序的身份验证就足够了,但是目前,Web服务器的“基本身份验证”根本无法访问Web应用程序。
当未在应用程序级别上进行身份验证时,Web应用程序将返回状态代码401。 WWW-Authenticate
标头定义了一个不同的领域,因此浏览器不会在Web服务器和Web应用程序身份验证之间混淆:如果我们没有定义其他领域,则浏览器将在Web服务器和Web应用程序身份验证之间立即丢弃Web服务器凭据。应用程序的401到达。
到目前为止一切顺利。但是,我们的应用程序具有自己的身份验证对话框。对于XHR请求,我们希望自己处理401状态,并且需要阻止浏览器的内部基本身份验证窗口。有一个简单的技巧:只需调整身份验证标头(WWW-Authenticate
)即可使用自定义身份验证方法:
WWW-Authenticate: CustomBasic realm="myapp"
Web服务器由此返回:
WWW-Authenticate: Basic realm="webserver"
这适用于Firefox,但不适用于Chrome。当使用CustomBasic
时,Chrome会忽略该领域,并丢弃领域“ webserver”的凭据(用户名/密码),就好像我们根本没有定义领域“ myapp”一样。
你知道为什么吗?您知道满足以下要求的解决方案吗?
- 两个领域都保持401状态
- 不要在应用程序级别上显示浏览器的基本身份验证窗口(特别是对于XHR请求)
是的,我知道我们可以通过在应用程序级别使用不同的HTTP状态代码来简单地解决此问题,并分别处理它们。但是,如果可能的话,我想保留正确的状态代码401。这也可能是有效的用例,例如如果您有两个可通过同一主机上的两个不同URL路径访问的Web应用程序。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)