c# - 基于策略的授权在 asp.net 核心中不起作用
问题描述
我正在尝试根据本文在 .net core 2.1 中使用基于策略的授权: https ://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-2.1
但是我似乎无法让它着火。
在下面的示例中,我已经注释掉了 context.succeeed 行,所以我会认为我对用户控制器的 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()
{
}
}
最后,我的控制器:
[Route("api/[controller]")]
[Authorize(Policy = "VerifyAuthCookie")]
public class UserController : Controller
{
}
如果我在 HandleRequirementAsync 中添加代码并设置断点,那么在调试时它不会被命中,所以我的 Handler 似乎根本没有被调用。
解决方案
您应该在 Startup 类的 Configure 方法app.UseAuthentication();
之前调用。app.UseMvc();
这会将 ASP.NET Core 身份验证中间件添加到请求管道中。
由于您正在使用services.AddMvcCore()
我们需要手动配置授权服务,因此services.AddMvc()
会自动为您服务。我们应该添加.AddAuthorization()
到IMvcCoreBuilder
. 这将添加默认的身份验证和授权服务以及 PolicyEvaluator。
如果您对将在您的 DI 容器中注册的确切服务感兴趣,您应该点击此链接。
推荐阅读
- javascript - 按字母顺序呈现名称列表并按其第一个字符分组
- xaml - Xamarin - 将 textchange 和 unfocus 事件分配给文本框(密码)
- class - Fortran - 如何为具有相同父级的不同类的数组编写用户定义的 I/O?
- mysql - 值对的 MySQL 唯一键/约束,无论它们在哪一列
- android - 屏幕关闭时,quickblox 示例视频聊天未接听电话
- c# - 导航到已在 Backstack 中查看
- google-sheets - 如何使用 ARRAYFORMULA 处理数组数组
- javascript - 组件自动完成 VueJS
- javascript - 单击链接时关闭全屏导航覆盖
- java - Junit 测试运行冻结