Я пытаюсь добавить настраиваемую политику авторизации, которая может проверять список групп, предоставленных в конфигурационном файле json. Я использую ASP.Net 5 - MVC 6, а также проверку подлинности Windows.ASP.Net 5 AuthorizationHandler Fail Redirect
Все работает нормально, за исключением случаев, когда я вызываю Fail. Тогда ничего не происходит. Отображается пустой экран. Вот мой метод HandleRequirementAsync. Я пробовал различные значения для результата задачи. Я бегаю, как сумасшедший, но без везения. Надеюсь, кто-то может помочь.
ЖЕЛАТЕЛЬНЫЙ РЕЗУЛЬТАТ: Я хотел бы перенаправить на пользовательскую страницу при сбое, но если это невозможно, по крайней мере, можно перенаправить обратно на страницу входа. Единственное, что, кажется, имеет какой-либо эффект, - это выбросить исключение.
Соответствующий регистрационный код в Startup:
var appSettings = Configuration.GetSection("AppSettings");
services.Configure<Models.AppSettings>(appSettings);
services.AddMvc();
services.AddAuthorization(options =>
{
options.AddPolicy("RoleAuth", policy => policy.Requirements.Add(new RolesRequirement(appSettings["AllowedGroups"])));
});
services.AddSingleton<IAuthorizationHandler, RoleAuthorizationHandler>();
И авторизации классов:
public class RolesRequirement : IAuthorizationRequirement
{
public RolesRequirement(string groups)
{
Groups = groups;
}
public string Groups { get; private set; }
}
public class RoleAuthorizationHandler : AuthorizationHandler<RolesRequirement>
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, RolesRequirement requirement)
{
if (!string.IsNullOrWhiteSpace(requirement.Groups))
{
Console.WriteLine(requirement.Groups);
var groups = requirement.Groups.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
//we could check for group membership here.... maybe???
foreach (var group in groups)
{
if (context.User.IsInRole(group))
{
context.Succeed(requirement);
return Task.FromResult(0);
}
}
}
else
{
context.Succeed(requirement);
}
context.Fail();
return Task.FromResult(0);
}
}
Также в настоящее время ищет способ перенаправления при возникновении сбоя, вам когда-либо не повезло? –
Nope Alex. Не повезло. Сожалею. – SpaceGhost440