gpt4 book ai didi

asp.net-core - Asp.Net Core 自定义授权总是以 401 Unauthorized 结束

转载 作者:行者123 更新时间:2023-12-03 13:18:15 28 4
gpt4 key购买 nike

我正在尝试使用 asp.net 核心实现自定义身份验证/授权流程,但未能这样做。身份验证似乎工作正常:如果我逐步调试,我可以看到 AuthenticationTicket 是从包含 isAuthenticated 为 true 的身份的 ClaimsPrincipal 创建的:

public class MyAuthHandler : AuthenticationHandler<MyAuthOptions>
{
protected override Task<AuthenticateResult> HandleAuthenticateAsync()
{
// grab stuff from the HttpContext
string authHeader = Request.Headers["Authorization"];
// do some stuff that are successfull in my tests
var cp = DoTokenBasedAuthentication(authHeader);

var ticket = new AuthenticationTicket(cp,
new AuthenticationProperties(), Options.AuthenticationScheme);
return Task.FromResult(AuthenticateResult.Success(ticket));
}
}

但是,我尝试在此之后添加一个虚拟 AuthorizationHandler:
public class MyRequirement : IAuthorizationRequirement
{
public MyRequirement()
{
}
}

public class MyAuthRequirement : AuthorizationHandler<MyRequirement>
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MyRequirement requirement)
{
context.Succeed(requirement);
return Task.CompletedTask;
}
}

并在我的启动文件中使用此代码:
services.AddAuthorization(options =>
{
options.AddPolicy("My",
policy => policy.Requirements.Add(new MyRequirement()));
});

但是每当我在 Controller 上添加 "[Authorize("My")]"时,所有调用总是返回 401。我的 AuthorizationHandler 永远不会到达。
这个问题看起来类似于 Asp.Net Core policy based authorization ends with 401 Unauthorized但与我的情况略有不同,我有一个经过身份验证的用户。我正在努力调试 asp.net MVC 源代码,所以我真的不知道发生了什么。

最佳答案

您的授权处理程序似乎没有插入。
您可以尝试将以下行添加到您的 Startup.ConfigureServices方法 :

services.AddSingleton<IAuthorizationHandler, MyAuthRequirement>();

关于asp.net-core - Asp.Net Core 自定义授权总是以 401 Unauthorized 结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45499636/

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