我试图在.net core 2.1中使用基于本文的基于策略的授权:https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-2.1
然而我似乎无法解雇它。
在下面的例子中,我已经注释掉了context.suceeed行,所以我认为我对用户控制器的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似乎根本没有被调用。
答案 0 :(得分:5)
您应该在Startup类的Configure方法中的app.UseAuthentication();
之前调用app.UseMvc();
。这将把ASP.NET Core身份验证中间件添加到请求管道。
由于您使用services.AddMvcCore()
,我们需要手动配置授权服务,services.AddMvc()
会自动为您执行操作。我们应该将.AddAuthorization()
添加到IMvcCoreBuilder
。
这将添加默认的身份验证和授权服务以及PolicyEvaluator。
如果您对将在DI容器中注册的确切服务感兴趣,请访问this链接。
答案 1 :(得分:1)
我有类似的问题,我通过以下方式解决了该问题:
services.AddMvcCore()。 AddAuthorization() .AddJsonFormatters();