MVC 4 Windows身份验证不起作用,为什么?

时间:2014-12-18 09:45:09

标签: asp.net-mvc-4

我在C#中有INTERNET Web MVC 4项目,本地工作正常。现在我需要使用Windows身份验证将项目转移到生产中作为INTRANET项目。

我读了一些文章,但它对我不起作用。这是我的第一个.NET Web应用程序。

我做的步骤

===第1步 - 在标签中的 Web.Config ===

我删除了身份验证标记

<authentication mode="Forms">
</authentication>

并添加了

<authentication mode="Windows" />
    <authorization>
      <allow roles="DOMAIN\ROLE_Name" />
      <deny users="*" />
    </authorization>

Active Directory中存在角色,包含用户帐户,包括我的帐户。

===第2步 - 在 Global.asax ===

我添加了整个程序,我不确定它是否正确,但我读到我应该在我的代码中执行该程序。

   public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        filters.Add(new System.Web.Mvc.AuthorizeAttribute());
    }

===第3步 - 我向Controller添加了授权===

public class HomeController : Controller
{
    **[Authorize(Roles = "DOMAIN\\ROLE_Name")]**
    public ActionResult Index()
    {

===第4步 - 我将网络部署到IIS ===

(我没有受到控制,但管理员向我保证配置正确)

当我点击网址时,我要求登录凭据,登录后我收到错误

You are not authorized to view this page

有些文章说我必须在项目属性中更改身份验证模式,但只有我在项目中拥有的属性才是这些

enter image description here

我觉得我混合了两种不同的方法,但我不知道。

1 个答案:

答案 0 :(得分:1)

为确保正在设置Web服务器的身份验证设置,您可以将以下XML添加到web.config文件 (我相信至少需要IIS7)

<system.webServer>
    <security>
          <authentication>
            <anonymousAuthentication enabled="false"/>
            <windowsAuthentication enabled="true" />
          </authentication>
    </security>
</system.webServer>

这将指示应用程序的Web设置禁用匿名并改为使用Windows身份验证。

Windows身份验证和MVC不能最好地协同工作。将它们一起使用的最佳方式是在web.config

中定义的
<authorization>
    <allow users="*" /> <!-- Or "?" if you only want authenticated users-->
</authorization>

然后使用AllowAnonymousAttributeAuthorizeAttribute微调访问权限。例如,您可以使用允许的默认角色设置全局过滤器:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new AuthorizeAttribute { Roles = "domain\\rolename" });
}

这样,所有控制器都将尝试对用户进行身份验证并验证他们是否处于给定角色。如果您需要每个人,经过身份验证和未经身份验证的用户,则可以使用AllowAnonymousAttribute。如果您确定某个操作需要不同的角色或用户,则可以使用AuthorizeAttribute进行装饰。请记住,当你这样做时,它将覆盖全局的。因此,如果您定义了允许的角色,则新属性不会将它们带过来。