Cou*_*ier 6 .net c# asp.net-core asp.net-core-2.0 asp.net-core-2.1
我最近将我的.NET Core应用程序从2.0升级到2.1.
我有一个在启动时添加的授权过滤器,如下所示:
var posBearerPolicy = new AuthorizationPolicyBuilder()
.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme??)
.RequireAuthenticatedUser()
.AddRequirements(new POSBearerRequirement())
.Build();
services.AddMvc(options =>
{
options.Filters.Add(new BearerAuthorizeFilter(posBearerPolicy));
});
Run Code Online (Sandbox Code Playgroud)
在BearerAuthorizeFilter的OnAuthorizationAsync方法中,我有以下逻辑:
public override Task OnAuthorizationAsync(AuthorizationFilterContext context)
{
if (context.Filters.Count(f => f is AuthorizeFilter) > 1 || context.Filters.Any(f => f is AllowAnonymousFilter))
{
return Task.CompletedTask;
}
return base.OnAuthorizationAsync(context);
}
Run Code Online (Sandbox Code Playgroud)
这完全符合我在.NET Core 2.0中的要求.我有一个适用于我所有控制器的默认授权策略.如果我想覆盖该策略,那么我只需在控制器中添加[Authorize(NAME)]属性.在OnAuthorizationAsync中,它将检测控制器上的多个AuthorizeFilter属性,然后仅应用我为该特定控制器重写的策略.
但是,自从更新到.NET Core 2.1以来,上面的posBearerPolicy正在应用.我有一个API控制器,其自定义属性继承自AuthorizeAttribute,该属性具有自己的策略定义和启动期间设置的所有内容.
即使那样
return Task.CompletedTask;
Run Code Online (Sandbox Code Playgroud)
线被击中,框架仍在应用我的posBearerPolicy.
有谁知道我错过了什么?导致这种情况在.NET Core 2.1中发生了什么变化?如果存在多个AuthorizationFilters,我应该如何重新编写OnAuthorizationAsync方法以告诉它跳过/绕过策略?
| 归档时间: |
|
| 查看次数: |
832 次 |
| 最近记录: |