如果Windows身份验证失败,则回退到基本身份验证

时间:2018-04-02 11:27:54

标签: c# asp.net asp.net-mvc authentication iis

我对ASP.NET MVC应用程序有以下要求

  1. 发送到特定页面的第一个GET请求应通过Windows身份验证进行身份验证。

  2. 根据某些数据库检查,用户可能被识别为未经授权,应用程序应以401响应。

  3. 在这种情况下,用户应该可以输入其他帐户的凭据。然后应将第二个请求发送到Web应用程序,并使用基本身份验证输入凭据。基本身份验证是此处必须满足的要求,因为在此流程中,我们对网络共享中的文档执行模拟访问(有关详细信息,请参阅The Double-Hop Problem

  4. 我的问题:

    我无法使浏览器回退到基本身份验证并显示用于输入凭据的对话框。浏览器收到针对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中的身份验证配置

    Windows Authentication Module

    所以我的问题是:

    1. 是否有可能在ASP.NET应用程序的未授权响应中禁止其他身份验证方案? 这样只允许WWW-Authenticate: Basic响应,除了使用基本身份验证外,不会向浏览器做出选择。

    2. 如果不是,是否有其他方法可以同时为我的应用程序提供Windows和基本身份验证,如果Windows身份验证请求失败,则回退到基本身份验证?

0 个答案:

没有答案