40

我以前从未对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 进行测试?

4

3 回答 3

34

对于 IIS 8.5 和 MVC 4:

Windows 身份验证如何工作?

在这种模式下,User.Identity(如 中HttpContext.Current.User.Identity)由底层 Web 服务器填充。这可能是@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;
于 2014-03-28T12:15:23.113 回答
10

我已经用 ASP.NET MVC 1.0 做到了这一点。那是相当久以前的事了。我记得 IIS 设置令人困惑。我只是做了一些检查,就控制器上的属性而言,ASP.NET MVC 4.0 似乎并没有太大变化。

对于您的问题:

  1. 它是如何工作的?以下参考资料很好地总结了一切。使用 Windows 身份验证 (C#) 对用户进行身份验证 并不完全适合 ASP.NET MVC 4.0,但它有一些背景。

    如何使用 ASP.NET MVC 创建 Intranet 站点适用于 ASP.NET MVC 3.0。

    我太新了,无法发布两个以上的链接,因此您必须在 MSDN 中搜索 .NET Framework 4 的“AuthorizeAttribute Class”。

  2. web.config 的设置是什么?- 我只记得改变了一个元素,“身份验证模式”。

  3. 就测试而言,我的 Windows 操作系统版本匹配得更好,我的开发机器在同一个 Windows 域上。但如果我没记错的话,这很有效。YMMV,但我记得考虑过的一件事是实施我自己的授权。也许这是您的案例的一种途径,您可以自己动手,然后在生产中切换到 Windows 身份验证。但是,如果您可以在公司域上设置一个,我会建议使用测试服务器进行几次测试迭代。

于 2013-06-21T19:46:00.687 回答
9

我发现了一个对我非常有用的视频,它逐步展示了如何为 ASP.NET MVC 网站实现和测试 Windows 身份验证。所以,我关闭这个问题。

来自非常友善的海报的视频:

如何在 ASP.NET MVC 3(模型视图控制器)应用程序中实现 Windows 身份验证?

于 2013-06-21T21:32:44.680 回答