Насколько я знаю, windows аутентификация будет просто проверять, аутентифицирован ли пользователь или нет. Он не обеспечит никакого контроля на основе ролей в приложении MVC.
Таким образом, ваш атрибут Authorize будет бесполезен.
Чтобы получить авторизацию на основе ролей AD, я предлагаю вам рассмотреть возможность использования авторизации на основе политик для аутентификации только пользователей из группы Active Directory, имеющих доступ к стр. Deals, вы можете обратиться к article .
. Вы можете создать собственные обработчики политики авторизации, чтобы проверить все группы ADG пользователя и проверить, содержат ли они желаемое имя группы.
Подробнее подробности, вы можете обратиться к следующим шагам:
1. Создать CheckADGroupRequirement (принять параметр)
public class CheckADGroupRequirement : IAuthorizationRequirement
{
public string GroupName { get; private set; }
public CheckADGroupRequirement(string groupName)
{
GroupName = groupName;
}
}
2. Создать обработчик
public class CheckADGroupHandler : AuthorizationHandler<CheckADGroupRequirement>
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,
CheckADGroupRequirement requirement)
{
//var isAuthorized = context.User.IsInRole(requirement.GroupName);
var groups = new List<string>();//save all your groups' name
var wi = (WindowsIdentity)context.User.Identity;
if (wi.Groups != null)
{
foreach (var group in wi.Groups)
{
try
{
groups.Add(group.Translate(typeof(NTAccount)).ToString());
}
catch (Exception e)
{
// ignored
}
}
if(groups.Contains(requirement.GroupName))//do the check
{
context.Succeed(requirement);
}
}
return Task.CompletedTask;
}
}
3. Зарегистрировать обработчик в ConfigureServices
services.AddAuthorization(options =>
{
options.AddPolicy("ADRoleOnly", policy =>
policy.Requirements.Add(new CheckADGroupRequirement("DOMAIN\\Domain Admin")));
});
services.AddSingleton<IAuthorizationHandler, CheckADGroupHandler>();
4.Controller
[Authorize(Policy = "ADRoleOnly")]
public class ADController : Controller