ASP.NET混合表单/ Windows身份验证

时间:2011-07-20 16:16:46

标签: .net asp.net authentication

我目前正在开发一个MVC3 Web应用程序,需要外网用户登录并使用Forms身份验证进行身份验证。 Intranet用户应使用Windows身份验证自动登录 我找到了这篇文章, http://aspalliance.com/553_Mixed_Mode_Authentication.all 但是它的日期是2004年11月,并且喜欢找到比7年前更新的东西。

我的计划是在IIS中有两个应用程序,虚拟目录指向同一个物理目录,但是一个允许匿名访问而另一个不允许。

当用户在Windows / Intranet方面进行身份验证时,我希望简单地模拟通过表单身份验证登录的用户。这种方法有什么缺陷吗?有更好的想法吗?

编辑:2011年7月22日

我正在使用IIS7,它不允许我做旧文章中建议的许多事情。由于IIS7和ASP.NET网站之间的身份验证集成有点紧张,因此不允许使用某些内容。例如,我无法在单个文件上设置Windows Auth,而应用程序的其余部分使用Forms Auth。

2 个答案:

答案 0 :(得分:3)

想知道这里最好的方法是不是有两个应用程序,其中第一个应用程序使用Windows身份验证,并且只包含HTTP管道中PostAuthenticate事件的挂钩。如果用户已通过身份验证,则会为他们提供表单票证并重定向到目标应用程序App2,后者使用表单身份验证。您必须注意cookie不是路径特定的,并且两个应用程序驻留在同一服务器上(或者加密密钥在web.config中同步)。如果用户未经过身份验证,您只需在没有身份验证票证的情况下重定向他们,并在到达App2时登录。

App1:www.myUrl.com \ MyApp

这是应用的“公共”网址,并通过挂钩PostAuthenticate事件来检测网络用户(请参阅Professional ASP.NET 2.0 Security, Membership, and Role Management):

//Hook PostAuthenticateRequest inside of global.asax
void Application_PostAuthenticateRequest(Object sender, EventArgs e)
{
    IPrincipal p = HttpContext.Current.User;

    if (p.Identity.IsAuthenticated)
    {
      // to do: give them a non-path specific ticket and redirect to App2
    }
}

App2:www.myUrl.com \ MyApp2

这是实际的应用程序。当网络用户从App1到达时,他们已经拥有了一张表单。当非网络用户到达时,他们将被重定向到login.aspx。

备注: 其中一个缺点是网络用户将App2加入书签。我不太确定如何解决这个问题。如果他们有一个未过期的cookie,那就不会太重要了。一种选择是在登录页面上放置一个链接,上面写着“我已经是网络用户 - 自动登录”,这会链接回App1,他们会在哪里登录?

我有一些代码可以协助发出表单票证。我会及时更新答案。

请注意,您将不得不在App2中进行一些奇特的角色管理步法来处理不同的角色提供程序。上面的亚马逊参考文献已经过时,但当我遇到这些自定义身份验证和授权问题时,我发现自己不断引用它。

答案 1 :(得分:0)

如果你要在IIS中创建两个不同的应用程序,这是完全可能的,所以你的工作就完成了! =)