IIS7混合模式身份验证

时间:2010-03-29 15:16:47

标签: iis-7 asp.net forms-authentication windows-authentication

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

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

可能需要表格的情况将保留给合同工,我们的支持人员,以及是否有人需要从他们的外部网访问他们的网站。所以主要是我们的员工登录检查功能并确认错误报告。我建议我们只是坚持认为,为了让我们的支持人员工作,我们需要一个永远存在的Windows登录,然后我们将对谁可以登录该网站强制执行当地责任,但我被告知我们会这样做最好有表单身份验证。

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

tl; dr:如何在IIS7中进行混合模式身份验证(窗体,窗口),而无需更改为经典管道,并且如果可能,仍然可以在IIS6中使用构建。

3 个答案:

答案 0 :(得分:7)

不,这不太正确,但我不能在评论回复中做代码块,所以我会发布一个新答案......

以下代码块允许我控制来自IIS7的匿名访问,而不必在配置数据库中进行清理(IIS6上的GUI更改已应用)

<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>

答案 1 :(得分:2)

感谢回到我身边,我已经开始玩几个星期几个实现了几周,我已经在互联网上阅读了(javascript,401,2个虚拟目录)但仍然havnt真的找到了我想要的任何东西。我们可能会将其推广到多个客户端 - 每个客户端具有不同的硬件/设置甚至不同版本的iis,因此希望它尽可能通用。在一些建议的解决方案上,我遇到了一堵砖墙......

当你说IIS7 +你在web配置中删除了anon访问时,我假设是这样的: -

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

答案 2 :(得分:1)

我花了几天时间尝试让它工作,略有不同......我希望第一个登录屏幕显示表单登录,下面有一个按钮&#34;使用Windows身份验证登录&#34;。< / p>

我最终放弃了所有这些技巧,因为我永远无法获得满意的结果。我的解决方法如下,并且完美运行:

  • 创建一个单独的网站&#34; LoginWithIntegratedSecurity&#34;
  • 使用集成安全性
  • 进行设置
  • 此网站创建一个临时&#34;用户哈希密钥&#34;在数据库中,标识用户
  • 使用网址
  • 中的哈希密钥重定向回到表单身份验证网站中的LogonPage
  • 表单身份验证中的LogonPage检查哈希密钥,并在数据库检查后将用户登录

因此,如果用户单击按钮&#34;使用Windows身份验证登录&#34;,服务器将重定向到Windows身份验证站点(传递&#34; ReturnUrl&#34;)。该站点挑战并登录用户,然后重定向回来,再次通过&#34; ReturnUrl&#34;以及HashKey。

这一切都发生得非常快,看起来非常无缝。

我知道这是一个hacky解决方法,但就我的情况而言,它运作良好。