Аутентификация Windows MVC [Авторизовать (роли = два слова)] не работает

Я разрабатываю интранет-сайт для своей компании и использую проверку подлинности Windows. Моя проблема заключается в том, что когда я пытаюсь добавить роль, состоящую из двух слов, разделенных пробелом, я получаю всплывающее окно Windows Security Modal с запросом моего имени пользователя и пароля. Однако, если роль состоит только из одного слова, она работает отлично.

Примеры имен групп в Active Directory: «Кадры», «Менеджеры проектов», «Образование» для моего примера ниже.

Пример, который работает:

 [Authorize(Roles = "Education")]

Примеры, которые не работают:

[Authorize(Roles = "Human Resources")]
[Authorize(Roles = "Project Managers")]

Я пытался:

[Authorize(Roles = "Human Resources")]
[Authorize(Roles = "Human_Resources")]
[Authorize(Roles = "HumanResources")]
[Authorize(Roles = @"DOMAIN\Human Resources")]
[Authorize(Roles = @"DOMAIN\HumanResources")]
[Authorize(Roles = @"DOMAIN\Human_Resources")]

Помимо входа в Active Directory и изменения моих групп пользователей, чтобы они не включали пробелы, есть ли что-нибудь, что я могу сделать?


person brown1455    schedule 25.09.2014    source источник


Ответы (2)


Я узнал две вещи. Вы должны выйти и снова войти в свою учетную запись домена, если вы добавили себя в группу. Windows Auth просматривал кешированную версию ролей, к которым я принадлежал. Администраторы домена — это группа, которая не допустит этого [Авторизовать (Роли = «Администраторы домена»)] в вашем коде.

person brown1455    schedule 26.09.2014

Вот несколько идей, как это исправить:

  1. Не нужно перезапускать, просто запретите себе доступ через web.config, например. <deny users="*" /> повторно откройте браузер, чтобы получить 401, удалите оператор отказа и перезапустите браузер, и кеш ролей обновится. но также:
  2. Проверьте, перепроверьте и снова проверьте правильность "имен ролей"
  3. префикс с доменом\ролями="домен\роль"
  4. Роль с пробелом отлично работает при использовании:

c#

public static class AppRoles
{
    public const string Manager     = @"domain\App Manager";
    public const string Admin       = @"domain\App Admin";
}

[Authorize(Roles = AppRoles.Admin)] 
public class MyAbcController : Controller
{
    //code
}
person Moji    schedule 29.01.2016