ASP.NET Core 2.1-如果没有策略,授权属性将无法运行

时间:2018-10-03 14:10:04

标签: c# asp.net-core-webapi asp.net-core-2.1 authorize-attribute

我有一个使用自定义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?

0 个答案:

没有答案