代码之家  ›  专栏  ›  技术社区  ›  Jamil

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

  •  2
  • Jamil  · 技术社区  · 6 年前

    我想为两步授权添加自定义策略,以便在第一步之后,用户可以访问第二步,然后访问所有内容。当我有一个策略时,一切正常,但当我添加另一个策略时,我开始出现这个错误。我如何添加策略:

    AuthorizationOptions authOptions = new AuthorizationOptions();
    
    authOptions.AddPolicy("FirstStepCompleted", policy => policy.RequireClaim("FirstStepCompleted"));
    authOptions.AddPolicy("Authorized", policy => policy.RequireClaim("Authorized"));
    
    services.AddAuthorization(o => o = authOptions);
    

    services.AddAuthorization
    (
        options => options.AddPolicy("FirstStepCompleted",
        policy => policy.RequireClaim("FirstStepCompleted"))
    );
    

    我做错了什么?

    UPD1。忘记了例外情况:

    InvalidOperationException:未找到名为“FirstStepCompleted”的授权策略。 Microsoft.AspNetCore.Authorization.AuthorizationPolicy.CombineAsync(IAuthorizationPolicyProvider policyProvider,IEnumerable AuthorizationData)

    1 回复  |  直到 5 年前
        1
  •  4
  •   Kirk Larkin    6 年前

    这个 AddAuthorization 调用接受将接收的实例的委托 AuthorizationOptions 代替 授权选项 在上面创建了一个新的( authOptions answer 有关重新指定参数的详细信息)。最终,这意味着 你没有添加任何策略

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

    services.AddAuthorization(o =>
    {
        o.AddPolicy("FirstStepCompleted", policy => policy.RequireClaim("FirstStepCompleted"));
        o.AddPolicy("Authorized", policy => policy.RequireClaim("Authorized"));
    });