gpt4 book ai didi

c# - ASP.Net 5 AuthorizationHandler 失败重定向

转载 作者:太空宇宙 更新时间:2023-11-03 17:06:23 24 4
gpt4 key购买 nike

我正在尝试添加自定义授权策略,该策略可以检查 json 配置文件中提供的组分隔列表。我正在使用 ASP.Net 5 - MVC 6 以及 Windows 身份验证。

一切正常,除了我调用 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);
}
}

最佳答案

我发现这样做的唯一方法是,不要使用 context.Fail(),而是这样做:

替换:

context.Fail();

与:

var mvcContext = context.Resource as AuthorizationFilterContext;
mvcContext.Result = new RedirectToActionResult("Action", "Controller", null);
context.Succeed(requirement);

允许上下文成功,将执行上下文,现在是重定向。

关于c# - ASP.Net 5 AuthorizationHandler 失败重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39230618/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com