【问题标题】:How to deal with mutually exclusive claims in policies to enforce four eyes principle如何处理保单中的互斥索赔以执行四眼原则
【发布时间】:2020-04-01 08:10:20
【问题描述】:

我正在尝试配置两个策略,它们只能具有两个声明中的一个来强制执行四眼原则:

services.AddAuthorization(options =>
                {
                    options.AddPolicy("CreditApprover", //An approver is not allowed to review.
                        policy => policy.RequireAssertion(ctx =>
                            ctx.User.HasClaim(claim => claim.Value == "CreditLoanApprover") &&
                            !ctx.User.HasClaim(claim => claim.Value == "CreditLoanReviewer")));

                    options.AddPolicy("CreditReviewer", //A reviewer is not allowed to approve.
                        policy => policy.RequireAssertion(ctx =>
                            !ctx.User.HasClaim(claim => claim.Value == "CreditLoanApprover") &&
                            ctx.User.HasClaim(claim => claim.Value == "CreditLoanReviewer")));
                });

我已将Authorize 属性添加到控制器操作中:

[Authorize(Policy = "CreditApprover")]
[HttpPost]
public async Task<ActionResult> Approve()
{
    // ...
}

[Authorize(Policy = "CreditReviewer")]
[HttpPost]
public async Task<ActionResult> Review()
{
    // ...
}

但是,如果我同时向两个不同的用户提供声明,他们仍然可以查看自己的批准。我希望这些用户不能这样做。这应该像这样,还是我需要建立一个自定义的AuthorizationHandler

【问题讨论】:

  • 看起来一切正常,可能你错过了什么。
  • 不确定发生了什么。也许我搞砸了我给自己的声明。似乎一天后如上所述工作:D

标签: c# identityserver4 asp.net-core-identity


【解决方案1】:

按照帖子本身的描述工作。在测试期间配置我的声明时可能遗漏了一些东西。

【讨论】:

    猜你喜欢
    • 2021-10-10
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多