Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iis 7 IIS7混合模式认证_Iis 7_Asp.net_Forms Authentication_Windows Authentication - Fatal编程技术网

Iis 7 IIS7混合模式认证

Iis 7 IIS7混合模式认证,iis-7,asp.net,forms-authentication,windows-authentication,Iis 7,Asp.net,Forms Authentication,Windows Authentication,我们正准备开始将一些IIS6站点迁移到IIS7,应用程序目前使用表单身份验证。我们已经开始收到来自不同站点的一些请求,要求用户使用Windows身份验证。虽然这很容易实现(我已经在内部表明,正如预期的那样,应用程序没有问题),但问题是如何在集成Windows无法工作时继续保持表单身份验证。我已经看过几个关于如何在IIS6上配置它的演练,我可以在IIS7上做同样的事情,但是我必须打开经典模式处理。如果可能的话,任何解决方案都应该可以移植回IIS6,以保持构建树的简单 那么我有什么选择呢?我是否在I

我们正准备开始将一些IIS6站点迁移到IIS7,应用程序目前使用表单身份验证。我们已经开始收到来自不同站点的一些请求,要求用户使用Windows身份验证。虽然这很容易实现(我已经在内部表明,正如预期的那样,应用程序没有问题),但问题是如何在集成Windows无法工作时继续保持表单身份验证。我已经看过几个关于如何在IIS6上配置它的演练,我可以在IIS7上做同样的事情,但是我必须打开经典模式处理。如果可能的话,任何解决方案都应该可以移植回IIS6,以保持构建树的简单

那么我有什么选择呢?我是否在IIS7中使用集成Windows身份验证设置应用程序,在web.config中使用Forms Auth设置应用程序,并将401个错误重定向到“错误页面”,允许他们使用表单登录,然后返回到常规应用程序

可能需要表单的情况将保留给合同工、我们的支持人员,以及需要从外部网访问其站点的人员。因此,主要是由我们的员工登录以检查功能并确认错误报告。我建议我们只需维护我们的支持人员的工作,我们需要一个始终处于活动状态的Windows登录,然后我们只需对可以登录到该站点的用户执行本地责任,但我被告知,我们最好使用表单身份验证

有什么想法吗?如果这能帮助论坛更好地缩小我的需求,我可以发布一些我已经阅读过的文章的链接


tl;dr:如何在IIS7中执行混合模式身份验证(表单、窗口),而不必更改为经典管道,并且如果可能的话仍然能够使用内置IIS6。

感谢您回复我,我已经在互联网上读到了几个星期,时断时续地讨论了几个实现(javascript,401,2个虚拟目录)但仍然并没有找到任何我想要的东西。我们可能会将它推广到多个客户端,每个客户端都有不同的硬件/设置,甚至是不同版本的iis,所以希望它尽可能通用。我在一些建议的解决方案上遇到了困难

当您说对于IIS7+您在web配置中删除了anon访问时,我假设如下:-

<location path="Authent/WinLogin.aspx" > 
  <system.webServer>
    <security>
      <authorization>
        <add accessType="Deny" users="?" />
      </authorization>
    </security>
  </system.webServer>
</location>


不,这不太正确,但我不能在评论回复中使用代码块,所以我将发布一个新的答案

下面的代码块允许我控制来自IIS7的anon访问,而不必在元数据库中乱搞(IIS6上的GUI更改应用于此)


我花了几天时间试图让它正常工作,但有一点不同……我想在第一个登录屏幕上显示表单登录,并在“使用Windows身份验证登录”下面显示一个按钮

我最终放弃了所有这些技术,因为我从来都无法获得令人满意的结果。我的解决方法如下,效果非常好:

  • 创建一个单独的网站“LoginWithIntegratedSecurity”
  • 使用集成安全设置此项
  • 此网站在数据库中创建一个临时“用户哈希键”,用于标识用户
  • 在url中使用哈希键重定向回表单身份验证网站中的LogonPage
  • LogonPage in Forms身份验证检查哈希密钥,并在数据库检查后登录用户
因此,如果用户单击“使用windows身份验证登录”按钮,服务器将重定向到windows身份验证站点(传递“返回URL”)。此站点向用户发起挑战并登录,然后重定向回,再次传递“返回URL”和哈希键

这一切发生得非常快,而且看起来非常无缝


我知道这是一个很难解决的问题,但就我而言,效果很好。

有两个独立的“项目”(a-la)会更好吗在我的主构建中,严格按照Web.config MachineKey发布特定于机器的Cookie,从而将身份验证机制与应用程序使用分开,并在主应用程序上保留表单?这可能是最简单的方法。我可能需要这样做:但当它都驻留在此外,对于在我发布原始问题和一些回答后阅读本文的任何人来说:如果用户导航到该站点,并且没有在401响应中输入凭据,则会返回到ASP.NET默认401错误页面。我还不知道如何将他们重定向到我的表单默认页面(但也许我太早就不看了?)不,这不太正确,但我不能在评论回复中执行代码块,所以我将发布一个新的答案…哇,这是一个巨大的解决办法。我的目录中有两个文件,具有不同级别的身份验证。是的,我想是这样。但是这个哈希键登录对于其他一些位和块非常有用,例如同步来自其他sy的登录和链接我也不希望外部(非集成)用户遇到集成的凭据提示。那么如何防止他们看到这些提示呢?通过“使用Windows登录”按钮,以便外部用户可以使用表单登录,而内部用户可以单击此按钮,将服务器端重定向到一个空白的集成安全页面,该页面会弹出提示(如果需要)然后用散列键重定向回来。用户所看到的集成安全页面的唯一一点就是弹出窗口。顺便说一句,我想你已经知道了这一点,但以防万一,我看到了一个从401返回登录屏幕的合理解决方法,如下所述。
<location path="WindowsLogin.aspx" >
    <system.web>
        <authorization>
            <deny users="?" />
            <allow users="*" />
        </authorization>
    </system.web>
    <system.webServer>
        <security>
            <authentication>
                <anonymousAuthentication enabled="false" />
                <windowsAuthentication enabled="true" />
            </authentication>
        </security>
    </system.webServer>
</location>