2014-12-18 4 views
0

У меня есть проект INTERNET Web MVC 4 в C#, который локально работает нормально. Теперь мне нужно переместить проект в производство с помощью Windows Authentication в качестве проекта INTRANET.MVC 4 Аутентификация Windows не работает, почему?

Я прочитал несколько статей, но это не работает для меня. Это мое первое веб-приложение .NET.

шаги я сделал

=== Шаг 1 - В Web.Config в теге ===

Я удалил тег аутентификации

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

и добавил

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

Роль существует в Active Directory и содержит User Accou включая мою учетную запись.

=== Шаг 2 - В Global.asax ===

Я добавил всю процедуры, я не уверен, если это правильно, но я читал, что я должен иметь эту процедуру в мой код.

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

=== Шаг 3 - я добавил к контроллеру Авторизация ===

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

=== Шаг 4 - развернуть сеть, чтобы IIS ===

(который я есть не был под контролем, но администратор заверил меня, что настроен должным образом)

Когда я ударил URL-адрес, я прошу ввести учетные данные и после входа в систему я получаю сообщение об ошибке

You are not authorized to view this page 

Некоторые статьи говорит, что я должен изменить режим проверки подлинности в свойствах проекта, но только свойства у меня по проекту являются эти

enter image description here

Я чувствую себя, что я смешивая два разных подхода, но я просто не знаю.

ответ

1

Чтобы убедиться, что параметры проверки подлинности веб-сервера создаются, вы можете добавить следующий XML в файл web.config (требуется, по крайней мере IIS7 я считаю).

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

Это даст указание веб-настройкам приложения отключить анонимность и вместо этого использовать проверку подлинности Windows.

Проверка подлинности Windows и MVC не работают вместе. Лучший способ использовать их вместе, чтобы определить в вашем web.config

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

Затем тонкой настройки доступа с AllowAnonymousAttribute и AuthorizeAttribute.Например, вы можете иметь глобальный набор фильтров с разрешенными ролей по умолчанию:

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

С этим все контроллеры будут пытаться проверить подлинность пользователя и проверить, что они находятся в данной роли. Если вы хотите всех, прошедших проверку подлинности и не прошедших проверку подлинности пользователей, вы можете использовать AllowAnonymousAttribute. Если вы решите, что действие требует разных ролей или пользователей, вы можете украсить его AuthorizeAttribute. Имейте в виду, что когда вы это сделаете, он переопределит глобальный. Поэтому, если вы определили разрешенные роли, новый атрибут не перенесет их.