MVC3混合表单和Windows身份验证

时间:2012-05-30 06:49:02

标签: asp.net-mvc asp.net-mvc-3 authentication forms-authentication

我目前有一个内部网站,可供外部客户访问。因此,我使用表单身份验证进行设置。然而,(我的老板)的权力希望我们所有的域用户都不必输入他们的用户名和密码来访问该网站。

我做了一些或阅读,一切似乎都指向设置一个WinLogin.aspx页面,你改变它以使用WindowAuthenthication,然后从那里重定向。

我有一个问题,因为我不喜欢在我的mvc应用程序中放置一个aspx表单。

有人能告诉我如何在没有第二个应用的情况下使用严格的MVC控制器/动作设置来实现混合认证吗?

注意:在IIS 7盒子上运行MVC 3。

1 个答案:

答案 0 :(得分:1)

表单身份验证与文件的URL或物理结构无关。重要的是URL应最终映射到服务器上的物理(或虚拟)资源,并进行处理,然后返回给用户。

因此,对于每个传入呼叫(每个HTTP请求,甚至是CSS和JavaScript文件的请求)之间的某处,您必须查看当前用户是否具有足够的权限来访问它。如果不是,那么您可以将其重定向到登录页面。

如果需要,您可以使用/user/windowslogin之类的网址,其中user是控制器的名称,windowslogin是您的操作方法的名称。然后,您可以在[WindowsAuthentication]操作和该属性(本质上是MVC过滤器)中创建自定义身份验证属性(类似windowslogin),您可以查看当前请求是否来自内部您的域名,如果是,请与Active Directory进行身份验证或类似的事情,并在成功进行身份验证的情况下,使用FormsAuthentication类创建身份验证Cookie,以及故事的其余部分。

但是,我认为这不是一件容易的事。其他人可能会推出更好的解决方案。