核心标识:未找到名为的 AuthorizationPolicy

Jam*_*mil 3 c# asp.net-core-mvc asp.net-core asp.net-core-identity

我想添加自定义策略以进行两步授权,因此在第一步之后,用户将可以访问第二步,然后再访问所有内容。当我有一项政策时,一切正常,但当我添加另一项政策时,我开始收到此错误。我如何添加策略:

AuthorizationOptions authOptions = new AuthorizationOptions();

authOptions.AddPolicy("FirstStepCompleted", policy => policy.RequireClaim("FirstStepCompleted"));
authOptions.AddPolicy("Authorized", policy => policy.RequireClaim("Authorized"));

services.AddAuthorization(o => o = authOptions);
Run Code Online (Sandbox Code Playgroud)

当我有一项政策时,我像这样添加它:

services.AddAuthorization
(
    options => options.AddPolicy("FirstStepCompleted",
    policy => policy.RequireClaim("FirstStepCompleted"))
);
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

UPD1。忘记了例外:

处理请求时发生未处理的异常。InvalidOperationException:未找到名为“FirstStepCompleted”的 AuthorizationPolicy。Microsoft.AspNetCore.Authorization.AuthorizationPolicy.CombineAsync(IAuthorizationPolicyProviderpolicyProvider,IEnumerableauthorizeData)

Kir*_*kin 6

AddAuthorization调用需要一个委托,该委托将接收要配置的实例AuthorizationOptions。在失败的示例中,您尝试用上面创建的新实例替换此现有实例( ),这没有实际效果(有关重新分配参数的更多信息,请参阅 Jon Skeet 的回答)。最终,这意味着您没有添加任何策略AuthorizationOptionsauthOptions

如果要在委托中添加多个策略,可以使用以下命令:

services.AddAuthorization(o =>
{
    o.AddPolicy("FirstStepCompleted", policy => policy.RequireClaim("FirstStepCompleted"));
    o.AddPolicy("Authorized", policy => policy.RequireClaim("Authorized"));
});
Run Code Online (Sandbox Code Playgroud)