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

Ily*_*dik 10 authentication jwt asp.net-identity asp.net-core

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

app.UseJwtBearerAuthentication(options => { options.AutomaticAuthenticate = true;} )
Run Code Online (Sandbox Code Playgroud)

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

理想的情况是什么,我想实现的是,所有操作都在默认情况下保护(有针对以往ASP.NET过滤器),并且我会把匿名在那些我想公众或者是授权("SomePolicy")如果我想更多的策略,但我希望在没有令牌的情况下无法访问API.我如何在新的ASP.NET中执行此操作(我知道我可以从具有此属性的某个控制器继承,但我希望有更好的方法)?

Ily*_*dik 46

.Net Core 3有一点不同的方式开始:

app.UseEndpoints(endpoints =>
{
    endpoints
        .MapControllers()
        .RequireAuthorization(); // This will set a default policy that says a user has to be authenticated
});
Run Code Online (Sandbox Code Playgroud)

可以更改默认策略或添加新策略并使用它。

PS 请注意,即使方法名称显示“授权”,默认情况下它也只要求用户经过身份验证。不过,可以添加更多策略来扩展验证。


Joe*_*tte 28

您仍然可以使用此示例中的过滤器:

services.AddMvc(config =>
{
    var policy = new AuthorizationPolicyBuilder()
                 .RequireAuthenticatedUser()
                 .Build();
    config.Filters.Add(new AuthorizeFilter(policy));
});
Run Code Online (Sandbox Code Playgroud)

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

  • 您可以在此处找到其他授权示例:https://github.com/blowdart/AspNetAuthorizationWorkshop (2认同)

归档时间:

查看次数:

5382 次

最近记录:

9 年,10 月 前