需要在asp.net核心中经过身份验证的用户,但在某些操作中需要自定义策略需要自定义策略

时间:2016-04-05 16:43:47

标签: c# asp.net-core authorization

我的Asp.net核心网站默认需要身份验证

services.AddMvc(config =>
{
    //only allow authenticated users
    var policy = new AuthorizationPolicyBuilder()
    .RequireAuthenticatedUser()
    .Build();

    config.Filters.Add(new AuthorizeFilter(policy));
});

但是对于一个操作,我需要允许匿名访问(如果数据库中没有用户,则为/ Account / AddUser)。

我创建了这个自定义策略,用于检查用户是否经过身份验证,或者用户db是否为空。

[Authorize(Policy = "NoUsersInDatabaseOrUserAuthenticated")]
public IActionResult AddUser()
{
    return View();
}

全球政策之间似乎存在一个AND,所以它不起作用。如果我添加[AllowAnonymous],则根本不评估该策略。

如何使用针对一个操作的自定义策略替换全局策略?

3 个答案:

答案 0 :(得分:3)

你不能。政策是附加的。因此,全局将始终存在,然后评估任何额外的策略。此外,策略需要身份验证,您不能拥有允许未经身份验证的用户或其他内容的策略,必须始终对其进行身份验证,因为身份验证会对授权结果起作用。

答案 1 :(得分:2)

我最终离开了全局身份验证要求,并在操作上放置了AllowAnonymous。然后,我通过在检查用户经过身份验证或用户db为空的操作中添加代码来解决该要求。

答案 2 :(得分:0)

您可以删除全局授权策略,只需在控制器级别进行授权。如果您有一个标有[授权]的控制器和一个标记为[AllowAnnonymous](或您自己的自定义策略)的操作,那么特定于操作的标记就会先于。