Я пытаюсь аутентифицировать всех пользователей из домена для моего приложения MVC. На данный момент я тестирую с пользователем PC_NAME/Администратор.
Я попытался авторизовать группу пользователей из PC_NAME в своем классе контроллера, как это предлагается в этом отвечать.
[Authorize(Roles = "PC_NAME\\Domain Users")]
Это не работает, мне просто предлагается войти в браузер.
Я также пробовал это в web.config вместо этого
<authorization>
<allow roles = "PC_NAME\Domain Users"/>
<deny users = "*"/>
</authorization>
это тоже безуспешно
Для записи я попытался аутентифицировать только роль пользователей без указания домена, и я смог получить доступ к своему сайту.
[Authorize(Roles = "Users")]
Это также работает, когда я просто указываю имя пользователя
[Authorize(User = "PC_NAME\\Administrator")]
Как я могу аутентифицировать всех пользователей из одного домена (в данном случае VSD-PROMETHEUS)?
Я ожидаю, что вам будет предложено ввести имя пользователя/пароль только в том случае, если первоначальная аутентификация не удалась. Например, при авторизации в роли пользователя без домена, как указано выше, я могу успешно войти в систему без запроса.
Я получил это, создав собственный атрибут авторизации.
using System;
using System.Web;
using System.Web.Mvc;
/// <summary>
/// Authorises User based on what domain they are on.
/// </summary>
public class AuthorizeDomainAttribute : AuthorizeAttribute
{
/// <summary>
/// List of domains to authorise
/// </summary>
public string[] Domains { get; set; }
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (httpContext == null)
{
throw new ArgumentNullException("httpContext");
}
// Get the domain part of the username
string userDomain = httpContext.User.Identity.Name.Substring(0, httpContext.User.Identity.Name.LastIndexOf('\\'));
// Check if the user is on any of the domains specified
foreach(string domain in this.Domains)
{
if (userDomain == domain)
{
return true;
}
}
// Otherwise don't authenticate them
return false;
}
}
А затем с помощью этого атрибута на моем контроллере.
[AuthorizeDomain(Domains = new[] { "PC_NAME")]
«Это не работает, мне просто предлагается войти в браузер». Ну, чтобы авторизовать вас в роли, она должна вас аутентифицировать, так почему бы не предложить вам войти в систему?