gpt4 book ai didi

c# - 基于策略的授权在 asp.net 核心中不起作用

转载 作者:行者123 更新时间:2023-11-30 13:35:34 24 4
gpt4 key购买 nike

我正在尝试根据这篇文章让基于策略的授权在 .net core 2.1 中工作:https://learn.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-2.1

但是我似乎无法启动它。

在下面的示例中,我注释掉了 context.suceeed 行,所以我认为我对用户 Controller 的 api 调用会失败。

但是我的 API 调用被接受了。

我做错了什么?

这是我的startup.cs

public class Startup
{

public void ConfigureServices(IServiceCollection services)
{

services.AddSingleton<IAuthorizationHandler, VerifyAuthCookieHandler>();

services.AddAuthorization(options =>
{
options.AddPolicy("VerifyAuthCookie", policy =>
policy.Requirements.Add(new VerifyAuthCookieRequirement()));
});

services.AddMvcCore().AddJsonFormatters();

}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseMvc();
}

}

这是我的处理程序

public class VerifyAuthCookieHandler : AuthorizationHandler<VerifyAuthCookieRequirement>
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,
VerifyAuthCookieRequirement requirement)
{

//context.Succeed(requirement);

return Task.CompletedTask;
}
}

这是我的要求:

public class VerifyAuthCookieRequirement : IAuthorizationRequirement
{

public VerifyAuthCookieRequirement()
{

}
}

最后,我的 Controller :

[Route("api/[controller]")]
[Authorize(Policy = "VerifyAuthCookie")]
public class UserController : Controller
{

}

如果我在 HandleRequirementAsync 中添加代码并设置断点,那么在我调试时它不会被命中,所以我的处理程序似乎根本没有被调用。

最佳答案

您应该在 Startup 类的 Configure 方法中调用 app.UseAuthentication(); 之前调用 app.UseMvc();。这会将 ASP.NET Core 身份验证中间件添加到请求管道。

由于您正在使用 services.AddMvcCore(),我们需要手动配置授权服务,services.AddMvc() 会自动为您完成一些工作。我们应该将 .AddAuthorization() 添加到 IMvcCoreBuilder。这将添加默认的身份验证和授权服务以及一个 PolicyEvaluator。

如果您对将在您的 DI 容器中注册的确切服务感兴趣,您应该关注 this链接。

关于c# - 基于策略的授权在 asp.net 核心中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50792910/

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