【问题标题】:Add extra parameter to every WCF call为每个 WCF 调用添加额外的参数
【发布时间】:2014-06-19 13:40:35
【问题描述】:

我们有按域分隔的 WCF 服务(在 IIS 中托管的 Web)。我们通过添加 ClaimsAuthorizationManager 并覆盖 CheckAccess 方法添加了一些基于声明的安全性。基本上,我们检查 ClaimsPrincipal 是否具有执行该方法所需的权限。

服务方法内部:

public DemandePaeDto ObtenirInfoDemandePAE(int idPreDemande, int numeroSequencePreDemande)
    {
        if (!ClaimsPrincipal.Current.CheckAccess(Management, "DoSomething"))
            return null;

在 ClaimsAuthorizationManager 内部:

public class FacadeClaimsAuthorizationManager : ClaimsAuthorizationManager
{
    public override bool CheckAccess(AuthorizationContext context)
    {
        var user = context.Principal;
        var resource = context.Resource.First().Value;

        foreach (var action in context.Action)
        {
            switch (resource)
            {
                case "Management":
                case "Sales":
                case "Product":
                    if (user.HasClaim(OurOwnCustomClaimTypes.Permission, action.Value))
                    {
                        return true;
                    }
                    break;
                //Pour les cas non gérés
                default:
                    return false;
            }
        }

        return false;
    }
}

问题是当我们需要使用其他测试工具的 WCF Storm 测试服务功能时,我们没有声明,因为我们将安全模式设置为 false。所以我们想为所有调用添加一个自定义参数。这样我们就可以通过在 CheckAccess 方法中返回 true 来绕过。我考虑过 MessageInpectors,但仍然想知道这是否是正确的方法。我不想将参数添加到合同中,因为我必须修改应用程序中的每个调用。

你有什么建议吗?

【问题讨论】:

    标签: wcf testing wcf-security claims


    【解决方案1】:

    您需要使用不同的ClaimsAuthorizationManager 进行测试。只需派生一个不同的版本并在您的测试环境中使用它。例如,它可以在所有调用中返回 true。

    【讨论】:

    • 这是ClaimsAuthorizationManager中返回true的目标,但是由于我们也在这个环境中测试了UI,所以我们需要保持原样。我们只需要测试服务,但不影响 UI 使用。
    • 我看不出任何类型的 UI 会如何影响您针对服务中的另一个授权管理器进行测试的能力。你能解释一下吗?
    • 我希望 UI 继续使用实际的 ClaimsAuthorizationManager 进行安全测试。但是当我们只测试服务时我不想要它。
    猜你喜欢
    • 2012-10-25
    • 2022-06-30
    • 2012-11-16
    • 2011-05-18
    • 1970-01-01
    • 2021-11-09
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多