如何在ASP.NET Core(asp.net 5)中使用持票人令牌默认保护所有控制器?

时间:2016-01-25 14:20:39

标签: authentication asp.net-identity asp.net-core jwt

我在我的应用程序中添加了一个JWT中间件:

app.UseJwtBearerAuthentication(options => { options.AutomaticAuthenticate = true;} )

没有趣的是,它会为所有操作抛出500异常(在以后的版本中应该更改为401),即使那些根本没有受到保护的(不具有授权属性)。在我看来,这是错误的,但也许我自己做错了。

理想情况下,我想要实现的是默认情况下所有操作都受到保护(以前的ASP.NET中都有过滤器),我会将Anonymous放在我想要公开或者授权的那些上(" SomePolicy& #34;)如果我想要其他策略,但我希望在没有令牌的情况下无法访问API。我如何在新的ASP.NET中执行此操作(我知道我可以从具有此属性的某个控制器继承,但我希望有更好的方法)?

2 个答案:

答案 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));
});

此示例中的策略非常简单,但有很多方法可以为各种要求,角色等配置策略。