gpt4 book ai didi

c# - 来自 AuthorizationHandler 的自定义重定向 (ASP.NET Core)

转载 作者:行者123 更新时间:2023-12-02 01:31:55 25 4
gpt4 key购买 nike

我正在使用向第三方服务发出 API 请求的身份验证中间件。然后,该中间件设置声明,稍后由 AuthorizationHandler 结合 IAuthorizationRequirement 和自定义策略来处理这些声明。

中间件工作正常,我能够构建声明:

context.User.AddIdentity(identity); // contains claims

我遇到的问题是从处理程序或属性重定向到特定的 URL(对于我们需要重定向的位置有自定义规则)。从我尝试过的处理程序:

var mvcContext = context.Resource as Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext;
mvcContext.Result = new RedirectToActionResult("login", "home", null);

但它被忽略了;仅返回 401。 AuthorizeAttribute 不再有 OnAuthorization,所以我也不能使用它......

想法?谢谢。

最佳答案

您在处理程序中使用 AuthorizationFilterContext 的方法几乎是正确的。如 this answer 中所述您还需要说 context.Succeed(requirement); 才能正常工作。

完整的解决方案将是这样的:

  1. 创建自定义要求:

    public class SomeCustomRequirement : IAuthorizationRequirement
    {}
  2. 创建自定义处理程序:

    public class SomeCustomRequirementHandler : AuthorizationHandler<SomeCustomRequirement>
    {
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, UserInformationCompletedRequirement requirement)
    {
    if (!fulfillsRequirement())
    if (context.Resource is AuthorizationFilterContext redirectContext)
    redirectContext.Result = new RedirectResult("/Account/Unauthorized");
    // even though this is weird it is necessary
    context.Succeed(requirement);
    }
    }
    }
  3. 注册处理程序:

    services.AddAuthorization(options =>
    {
    options.AddPolicy(IdentityConstants.UserInformationCompletePolicy, policy =>
    {
    policy.RequireAuthenticatedUser();
    policy.Requirements.Add(new SomeCustomRequirement());
    });
    });

    services.AddSingelton<IAuthorizationHandler, SomeCustomRequirementHandler>();
    // OR transient if the handler uses the Entity Framework
    services.AddTransient<IAuthorizationHandler, SomeCustomRequirementHandler>();

尽管我的回答迟了,但我希望它可以帮助 future 的访客。

关于c# - 来自 AuthorizationHandler 的自定义重定向 (ASP.NET Core),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41707051/

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