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;

【讨论】:

对于任何阅读本文的人,请不要使用&lt;authorization&gt; 标签来保证生产安全,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?

ASP.NET MVC 4 模型验证

跟我一起学习ASP.NET 4.5 MVC4.0

ASP.NET MVC 4 (十三) 基于表单的身份验证

ASP.Net MVC 3/4 托管在 IIS 7.5 默认处理程序映射上

Asp.Net MVC 4 与 Visual Studio 2012 的混合?