我对ASP.NET MVC应用程序有以下要求
发送到特定页面的第一个GET请求应通过Windows身份验证进行身份验证。
根据某些数据库检查,用户可能被识别为未经授权,应用程序应以401响应。
在这种情况下,用户应该可以输入其他帐户的凭据。然后应将第二个请求发送到Web应用程序,并使用基本身份验证输入凭据。基本身份验证是此处必须满足的要求,因为在此流程中,我们对网络共享中的文档执行模拟访问(有关详细信息,请参阅The Double-Hop Problem)
我的问题:
我无法使浏览器回退到基本身份验证并显示用于输入凭据的对话框。浏览器收到针对Windows和基本身份验证的WWW-Authenticate
质询的响应,并再次使用Windows身份验证重新发送GET请求。
我明白为什么会这样。根据{{3}}:
客户端选择最安全的身份验证机制(windows) 从服务器提供的列表中并采取必要的步骤 向服务器提供所需的信息。
但是我无法限制响应仅在我的ASP.NET应用程序中挑战基本身份验证。似乎WWW-Authenticate
标题是在IIS管道之后由IIS(Authentication Precedence and Behavior in IIS内部的某处)添加的。我从控制器操作返回Unauthorized(new AuthenticationHeaderValue("Basic"))
但是最后一组标题看起来像:
WWW-Authenticate: Basic
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
WWW-Authenticate: Basic realm="localhost"
我看到了解决此问题的唯一可行方法:处理401响应,其中一些客户端代码将询问用户凭据(在自己的对话框中)并使用基本身份验证发送请求。我想避免使用此自定义代码并使用标准浏览器对话框。
这是IIS中的身份验证配置
所以我的问题是:
是否有可能在ASP.NET应用程序的未授权响应中禁止其他身份验证方案?
这样只允许WWW-Authenticate: Basic
响应,除了使用基本身份验证外,不会向浏览器做出选择。
如果不是,是否有其他方法可以同时为我的应用程序提供Windows和基本身份验证,如果Windows身份验证请求失败,则回退到基本身份验证?