如何解决WCF:匹配特定的WS-Security方案签名,加密,UserPass
我正在尝试匹配供应商提供的特定WS-Security规范。以下内容可在SOAP UI中使用,我现在尝试在C#WCF中重新创建(针对.NET 4.7.2或4.8):
- 用户名/密码元素
- 时间戳:9000ms
- 签名(证书A):
- 使用证书签名
- 添加签名元素
- 签名时间戳和用户名令牌
- 加密(证书B):
- 创建加密密钥
- 加密正文,时间戳和用户名令牌
到目前为止,我尝试过的所有事情似乎都加密了WS-Security标头中的所有内容,除了时间戳。
后面的参考文献:
SOAP UI设置-签名:
SOAP UI设置-加密:
解决方法
您可以尝试使用IClientMessageInspectortor向邮件添加标头。在BeforeSendRequest方法中,您可以向传出邮件中添加自定义标头。以下是演示:
public class CustomMessageInspector : IClientMessageInspector
{
public void AfterReceiveReply(ref Message reply,object correlationState)
{
return;
}
public object BeforeSendRequest(ref Message request,IClientChannel channel)
{
MessageHeader header = MessageHeader.CreateHeader("Testreply","http://Test","Test");
request.Headers.Add(header);
return null;
}
}
[AttributeUsage(AttributeTargets.Interface)]
public class CustContractBehaviorAttribute : Attribute,IContractBehavior
{
public void AddBindingParameters(ContractDescription contractDescription,ServiceEndpoint endpoint,BindingParameterCollection bindingParameters)
{
return;
}
public void ApplyClientBehavior(ContractDescription contractDescription,ClientRuntime clientRuntime)
{
clientRuntime.ClientMessageInspectors.Add(new CustomMessageInspector());
}
public void ApplyDispatchBehavior(ContractDescription contractDescription,DispatchRuntime dispatchRuntime)
{
return;
}
public void Validate(ContractDescription contractDescription,ServiceEndpoint endpoint)
{
return;
}
}
添加CustContractBehaviorAttribute以应用它:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。