我们有域名分隔的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,但仍然想知道它是否是正确的方法。我不想在合同中添加参数,因为我必须修改应用程序中的每个调用。
你有什么建议吗?
答案 0 :(得分:0)
您需要为测试使用不同的ClaimsAuthorizationManager
。只需派生出一个不同的版本并在测试环境中使用它。例如,它可以在所有呼叫中返回true。