我在我的应用程序中添加了一个JWT中间件:
app.UseJwtBearerAuthentication(options => { options.AutomaticAuthenticate = true;} )
没有趣的是,它会为所有操作抛出500异常(在以后的版本中应该更改为401),即使那些根本没有受到保护的(不具有授权属性)。在我看来,这是错误的,但也许我自己做错了。
理想情况下,我想要实现的是默认情况下所有操作都受到保护(以前的ASP.NET中都有过滤器),我会将Anonymous放在我想要公开或者授权的那些上(" SomePolicy& #34;)如果我想要其他策略,但我希望在没有令牌的情况下无法访问API。我如何在新的ASP.NET中执行此操作(我知道我可以从具有此属性的某个控制器继承,但我希望有更好的方法)?
答案 0 :(得分:28)
从.Net Core 3
开始,其完成方式略有不同:
app.UseEndpoints(endpoints =>
{
endpoints
.MapControllers()
.RequireAuthorization(); // This will set a default policy that says a user has to be authenticated
});
可以更改默认策略或添加新策略并使用它。
答案 1 :(得分:25)
您仍然可以使用此示例中的过滤器:
services.AddMvc(config =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
config.Filters.Add(new AuthorizeFilter(policy));
});
此示例中的策略非常简单,但有很多方法可以为各种要求,角色等配置策略。