Ошибка 401: Active Directory и Asp.Net MVC - PullRequest
1 голос
/ 19 января 2012

Я реализовал следующий атрибут действия в своем решении MVC.

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class AuthorizeADAttribute : AuthorizeAttribute
{
    public string[] Groups { get; set; }      

      protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        if (base.AuthorizeCore(httpContext))
        {
            /* Return true immediately if the authorization is not 
            locked down to any particular AD group */
            if (Groups == null)
                return true;

            foreach (var group in Groups)
                if (httpContext.User.IsInRole(group))
                    return true;

        }
        return false;
    }
}

И вызвал его так:

 public const string Admin = "MY_DOMAIN\\Admins";
 public const string Users = "MY_DOMAIN\\Users";
 public const string AddUser = "MY_DOMAIN\\AddUser";


 [AuthorizeAD(Groups = new string[] { Admin, Users })]
 public ActionResult GridData(...)
 { ... }

 [AuthorizeAD(Groups = new string[] { Admin, Users, AddUser })]
 public ActionResult Add(...)
 { ... }

Казалось, что до сих пор он работал нормальнолокально без проблем), пока кто-то не заметил (по другому опубликованному мной вопросу), что я получил 401 ошибку на развернутом экземпляре.быть переработанным, если кто-то не имеет представления о том, что проблема может быть в среде хоста.Идея заключается в том, что для доступа к сайту пользователь должен находиться в группе администраторов или пользователей в активном каталоге, и если ему назначена роль пользователя, ему также необходимо принадлежать к другой группе, например: Добавить,Удалить, обновить и т. Д ...

Пока что я в значительной степени озадачен: /

1 Ответ

2 голосов
/ 19 января 2012

Казалось, что до сих пор все работало нормально (локально без проблем), пока кто-то не заметил (на другой вопрос я отвечал), что я был получение 401 ошибки на развернутом экземпляре

Это совершенно нормально, и именно так работает NTLM-аутентификация . Это протокол аутентификации «вызов-ответ», означающий, что сервер бросает вызов клиенту, отправляя страницу 401, на которую клиент отвечает, ... Таким образом, 401-е, которые вы видите, являются частью вызова, который сервер отправил клиенту для аутентификации. Вы видите, что в итоге клиент успешно ответил на запрос и был аутентифицирован с успехом 200.

Я не думаю, что вы должны что-то переделывать с вашим пользовательским атрибутом авторизации. Просто вам это, вероятно, не нужно, поскольку вы можете достичь аналогичной функциональности с помощью атрибута Authorize по умолчанию:

[Authorize(Roles = "MY_DOMAIN\\Admins,MY_DOMAIN\\Users" })]
public ActionResult GridData(...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...