[Authorize(AuthenticationSchemes = AuthenticationSchemes.CookieAuthenticationScheme)]
public class MyController : ControllerBase
{
[HttpPost("ui")]
[ProducesResponseType(
(int) HttpStatusCode.Created)]
public async Task Action1()
{
}
[HttpPost]
[ProducesResponseType(
(int)HttpStatusCode.Created)]
[Authorize(AuthenticationSchemes = AuthenticationSchemes.JwtAuthenticationScheme)]
public async Task Action2()
{
}
}
我有一个此控制器,其中Action2具有与Controller中的身份验证方案不同的Authorize属性。但是,当我使用有效的Cookie身份验证但使用无效的身份验证令牌来调用Action2时,那么Action2也会获得授权-我期望得到401 / Unauthorized响应。
这是预期的行为吗?
使用Asp.net core 2.2
答案 0 :(得分:1)
在ASP.NET Core 2.1之前,所有策略都将单独评估,并且都需要得到满足。
这在ASP.NET Core 2.1中进行了更改,指出此行为是意外的。在该版本中,将合并策略,以便如果至少满足一个策略,则也将满足该请求的授权要求。
该团队在AllowCombiningAuthorizeFilters
上公开了一个名为MvcOptions
的新资产,以防人们依赖该行为。
请参阅:
如果您想恢复原来的行为,可以在Startup
类中使用以下内容:
app.AddMvc(options =>
{
options.AllowCombiningAuthorizeFilters = false;
});