ASP.NET MVC 4 的 Windows 身份验证 - 它是如何工作的,如何测试它
Posted
技术标签:
【中文标题】ASP.NET MVC 4 的 Windows 身份验证 - 它是如何工作的,如何测试它【英文标题】:Windows Authentication for ASP.NET MVC 4 - how it works, how to test it 【发布时间】:2013-06-17 22:21:35 【问题描述】:我以前从未对ASP.NET MVC Web 应用程序使用过Windows 身份验证,而是使用表单身份验证。最近,我有一个 ASP.NET MVC 4 Web 应用程序,该应用程序需要为获准登录我公司 Web 服务器的用户实施 Windows 身份验证。所以,我有一些关于 Windows 身份验证的问题。我正在使用 Visual Studio 2012。
Windows 身份验证如何工作?
如何在 web.config 文件中正确实现 Windows 身份验证?
如何测试 Windows 身份验证是否真的适用于我的 ASP.NET MVC 4 网站?换句话说,如何在本地开发 PC 上使用本地 IIS(版本 8)和我公司的真实 Web 服务器上使用 IIS 版本 7 进行测试?
【问题讨论】:
这与在 Web 表单应用程序中测试应该没有什么不同。 @jacob,感谢您的回复。你能告诉我更多细节吗? 如果您使用 IIS Express 在本地运行,您可能还需要查看这篇文章。 ***.com/questions/4762538/… 【参考方案1】:对于 IIS 8.5 和 MVC 4:
Windows 身份验证如何工作?
在这种模式下,User.Identity
(如HttpContext.Current.User.Identity
)由底层网络服务器填充。这可能是@R Kumar 演示的链接中的 IIS Express,或者是 @Thomas Benz 的视频中的完整 IIS。
具体来说,User.Identity 是一个 WindowsIdentity 对象。例如。以下演员表将起作用:
WindowsIdentity clientId = (WindowsIdentity)HttpContext.Current.User.Identity;
如何在 web.config 文件中正确实现 Windows 身份验证?
<system.web>
<authentication mode="Windows" />
...
如何测试 Windows 身份验证是否真的适用于我的 ASP.NET MVC 4 网站?换句话说,如何在我的本地开发 PC 上使用本地 IIS(版本 8)和我公司的真实 Web 服务器上使用 IIS 版本 7 进行测试?
首先,更改 ASP.NET 授权以排除当前用户。例如。
<system.web>
<authentication mode="Windows" />
<authorization>
<allow users="yourdomain\someotheruser" />
<deny users="*" />
</authorization>
其次,使用 IIS 管理器为您的站点启用 Windows 身份验证。它在“身份验证”功能下。 并且禁用匿名身份验证。
请注意,旧的解释会建议您在网站的 web.config 元素下进行更改。但是,出于安全原因,最近的 IIS 实现阻止了这一点。
三,将浏览器指向网页。浏览器应要求您提供凭据,因为当前用户无权访问该网站。提供网站授权的那些,你的 MVC 代码应该运行。
四、检查用户身份。例如。
WindowsIdentity clientId = (WindowsIdentity)HttpContext.Current.User.Identity;
【讨论】:
对于任何阅读本文的人,请不要使用<authorization>
标签来保证生产安全,lock down paths correctly。
Liiiiiitle 迟到了,但你能总结一下它是如何工作的吗?目标服务器如何知道我的本地计算机正在运行的帐户?我在请求标头中没有看到它。
@Marie IIRC,您只能登录到 WebServer 机器知道的帐户。该机器将有权访问 WebServer 的本地用户列表或通过 ActiveDirectory 访问域的用户列表。【参考方案2】:
我已经使用 ASP.NET MVC 1.0 完成了这项工作。那是相当久以前的事了。我记得 IIS 设置令人困惑。我只是做了一些检查,就控制器上的属性而言,ASP.NET MVC 4.0 看起来并没有太大变化。
对于您的问题:
它是如何工作的?以下参考资料很好地总结了一切。 Authenticating Users with Windows Authentication (C#) 不完全适合 ASP.NET MVC 4.0,但它有一些背景。
How to Create an Intranet Site Using ASP.NET MVC 适用于 ASP.NET MVC 3.0。
我太新了,不能发布两个以上的链接,因此您必须在 MSDN 中搜索 .NET Framework 4 的“AuthorizeAttribute 类”。
web.config 有哪些设置? - 我只记得更改了一个元素,“身份验证模式”。
就测试而言,我的 Windows 操作系统版本匹配得更好,而且我的开发机器在同一个 Windows 域上。但如果我没记错的话,这很有效。 YMMV,但我确实记得考虑过的一件事是实施我自己的授权。也许这是您的案例的一种途径,您可以自己动手,然后在生产中切换到 Windows 身份验证。但是,如果您可以在公司域上设置一个测试服务器,我建议您使用测试服务器进行几次测试迭代。
【讨论】:
非常感谢您的客气话和帮助。我发现了一个对我有帮助的在线视频(见下文),他的视频对我有用。所以,我关闭了这个帖子。【参考方案3】:我发现了一个对我非常有用的视频,它逐步展示了如何为 ASP.NET MVC 网站实现和测试 Windows 身份验证。所以,我结束了这个问题。
来自一位非常友善的海报的视频:
How to implement windows authentication in ASP.NET MVC 3 ( Model view controller) application?
【讨论】:
以上是关于ASP.NET MVC 4 的 Windows 身份验证 - 它是如何工作的,如何测试它的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 localDB 将 ASP.NET MVC 4 应用程序部署到 Windows 7 上的本地 IIS?