【发布时间】: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