【问题标题】:MVC3 mixed forms and Windows authenticationMVC3 混合表单和 Windows 身份验证
【发布时间】:2012-05-30 06:49:01
【问题描述】:
我目前有一个可供外部客户访问的 Intranet 站点。因此,我使用表单身份验证进行了设置。然而,(我的老板)的权力希望我们所有的域用户不必输入他们的用户名和密码来访问该站点。
我做了一些或阅读,一切似乎都指向设置一个 WinLogin.aspx 页面,您将其更改为使用 WindowAuthenthication,然后从那里重定向。
我对此有疑问,因为我不喜欢在我的 mvc 应用程序中放置一个 aspx 表单。
谁能告诉我如何在没有第二个应用程序的情况下使用严格的 MVC 控制器/动作设置来实现混合身份验证?
注意:在 IIS 7 机器上运行 MVC 3。
【问题讨论】:
标签:
asp.net-mvc
asp.net-mvc-3
authentication
forms-authentication
【解决方案1】:
表单身份验证与文件的 URL 或物理结构无关。重要的是 URL 最终应该映射到服务器上的物理(或虚拟)资源,并被处理并返回给用户。
因此,对于每个传入调用(每个 HTTP 请求,甚至是 CSS 和 JavaScript 文件的请求),您必须查看当前用户是否有足够的权限来访问它。如果不是,那么您可能会将他重定向到 登录 页面。
如果需要,您可以使用类似 /user/windowslogin 的 URL,其中 user 是控制器的名称,windowslogin 是您的操作方法的名称。然后,您可以在 windowslogin 操作上创建自定义身份验证属性(类似于 [WindowsAuthentication]),在该属性(本质上是 MVC 过滤器)中,您可以查看当前请求是否来自您的域内,并且如果是这样,请与 Active Directory 联系以进行身份验证或类似的事情,并在身份验证成功的情况下,使用 FormsAuthentication 类创建身份验证 cookie,以及故事的其余部分。
但是,我认为这不是一件容易的事。其他人可能会引入更好的解决方案。