【问题标题】:Is it possible to have both Forms Authentication and Windows Authentication in an ASP.NET site?是否可以在 ASP.NET 站点中同时使用表单身份验证和 Windows 身份验证?
【发布时间】:2011-05-12 13:39:00
【问题描述】:

我有一个网站,其中绝大多数内容都将使用表单身份验证进行保护。但是,管理人员将在内部使用一个子文件夹。我想使用 Windows 身份验证来保护这个文件夹。那可能吗?我必须将管理文件夹设为虚拟目录吗?

澄清:管理人员无需访问主站点。它们实际上是两个独立的站点/应用程序。普通用户将通过 Forms Authentication 访问主应用程序(并且永远不会访问 admin 文件夹)。管理员用户将通过 Windows 身份验证访问管理员应用程序(并且永远不会访问主站点)。

谢谢, 科里

【问题讨论】:

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


    【解决方案1】:

    是的,这是可能的,但您必须构建一个自定义成员资格提供程序或一个接口来允许它。除非它们位于完全独立的项目/应用程序域中,否则无法对子文件夹指定单独的身份验证方法。

    实现此目的的一种方法是使用 LDAP 成员资格提供程序并根据用户名更改 ldap 连接(如果有可识别的方法)。

    另一种方法是提供一个单独的网站,该网站使用 Windows 身份验证来执行登录,然后为用户构建一个自定义 cookie 并将它们传输回原始网站,将个人识别为管理人员的成员。

    然后可以使用 web.config 中的 <location> 元素保护文件夹。

    【讨论】:

      【解决方案2】:

      如果我要构建一个使用混合身份验证的网站,我会设置该网站以使用网络表单。然后,我将在此应用程序内部设置一个虚拟应用程序,该应用程序包含相同的表单身份验证 web.config 信息,但设置为使用 Windows 身份验证。

      在您验证其凭据后,在 Windows 身份验证站点的登录页面上,我将手动调用 FormsAuthentication 来创建身份验证令牌。此时,您可以将用户重定向到 Forms Auth 站点并且他们应该已登录(只要两个站点的所有 forms auth cookie 信息相同,这可能还包括需要为两个站点设置相同的机器密钥应用程序)。

      我没有专门这样做,但这绝对是一个可行的(并且可能是最优化的)解决方案。

      【讨论】:

      • 好吧,也许我在最初的问题中没有澄清这一点。通过 Windows 身份验证登录到管理应用程序的管理员用户确实不需要访问站点的其余部分(反之亦然)。它们实际上是两个完全独立的站点/应用程序。也许更好的描述方式是,我有一个表单身份验证,它将有一个文件夹,管理员用户可以使用 Windows 身份验证访问该文件夹,而管理员用户不需要访问应用程序的其余部分。
      【解决方案3】:

      这可能就像在 Windows 资源管理器中右键单击 admin 文件夹并在“安全”选项卡中设置权限一样简单。

      【讨论】:

        【解决方案4】:

        将管理站点放在自己的应用程序中 - 通过右键单击 IIS 管理器中的文件夹并选择转换为应用程序。

        完成后,您可以通过在 IIS 管理器中突出显示应用程序文件夹,然后选择身份验证并调整它们来调整应用程序的身份验证方法(或者,如果您无法远程访问,则可以通过 web.config 硬方式进行机器)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-10-30
          • 1970-01-01
          • 2012-03-15
          • 2015-08-06
          • 2010-10-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多