我有一个使用自定义HMAC身份验证的ASP.NET Core 2.1 Web Api项目。身份验证正在成功识别用户。
我正在对多个控制器操作(用于受限访问)使用“策略”,并且有一个控制器操作要允许“匿名”访问。所有其他控制器操作应只要求对用户进行身份验证(常规访问)。
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(options =>
{
options.Filters.Add(new RequireHttpsOrCloseAttribute());
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddAuthentication(HmacAuthenticationDefaults.Scheme)
.AddHmacAuthentication();
services.AddAuthorization(options =>
{
options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();
options.AddPolicy("Admin", policy => policy.RequireRole("Admin"));
options.AddPolicy("Historian", policy => policy.RequireRole("Historian"));
});
}
这是一个示例控制器,其中第一个操作使用策略Historian
,该策略有效并且将成功返回。
第二个操作仅使用基本的Authorize
属性,将为同一用户返回未经授权的内容。
[Route("[controller]")]
[ApiController]
public class EventsController : ControllerBase
{
[Authorize(Policy = "Historian")]
[Route("Source/{sourceKey:int}/First")]
public IActionResult Returns200(int sourceKey)
{
//return a result
}
[Authorize]
[Route("Source/{sourceKey:int}/Last")]
public IActionResult Returns401(int sourceKey)
{
//return a result
}
}
我尝试在AddAuthorization
下设置DefaultPolicy,但这无济于事。我真的不想创建“ GeneralAccess”策略,而只是使用Authorize
属性来指定它。
为什么Authorize
属性没有策略返回401?