我有一个实现了IAuthorizationPolicy的类。我基于拥有我所有基础级别角色的登录用户(我也使用声明完成了此操作)设置了一个自定义Principal对象。现在我想根据作为消息参数传入的键值更改特定主体的角色。通过方法改变WCF安全角色/声明参数
我遇到的问题是请求消息无法在授权策略类中读取,因为我无权将消息写回请求上下文。我可以使用CheckAccess方法的重写复制并读取ServiceAuthorizationManager派生类中的消息。但是,我必须确保在执行此操作之前已经调用了GetAuthorizationPolicies方法。
我在寻找关于如何根据消息是否包含特定参数来改变委托人角色的建议。基本上,当评估呼吁我想这样做的策略方法ID:
string myObjectId = null;
if (!messageCopy.IsEmpty)
{
System.Xml.XmlDictionaryReader xdr = messageCopy.GetReaderAtBodyContents();
xdr.ReadToDecendant("objectId");
if (xdr.Read())
{
myObjectId = xdr.ReadContentAsString();
}
xdr.Close();
}
messageCopy.Close();
ClaimSet claims = (myObjectId != null) ?
MapClaims(identity, myObjectId) : MapClaims(identity);
DefaultPrincipal principal = new DefaultPrincipal(identity, claims);