为每个WCF调用添加额外参数

时间:2014-06-19 13:40:35

标签: wcf testing wcf-security claims

我们有域名分隔的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,但仍然想知道它是否是正确的方法。我不想在合同中添加参数,因为我必须修改应用程序中的每个调用。

你有什么建议吗?

1 个答案:

答案 0 :(得分:0)

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