asp.net - WCF:匹配特定的 WS-Security 方案(签名、加密、用户密码)
问题描述
我正在尝试匹配来自供应商的特定 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, ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
clientRuntime.ClientMessageInspectors.Add(new CustomMessageInspector());
}
public void ApplyDispatchBehavior(ContractDescription contractDescription, ServiceEndpoint endpoint, DispatchRuntime dispatchRuntime)
{
return;
}
public void Validate(ContractDescription contractDescription, ServiceEndpoint endpoint)
{
return;
}
}
添加 CustContractBehaviorAttribute 以应用它:
推荐阅读
- python - For 循环没有正确地将信息附加到二维数组中
- javascript - SwiperJS - 在同一页面上运行 2 张不同的幻灯片。幻灯片 2 导致溢出和间距问题
- r - R 分组频率表
- c# - 从 PInvoke 返回一个结构
- c++ - 模板函数中的默认 lambda 参数
- mongodb - 使用 mongoose 将 CSV 文件数据导入 MongoDB
- excel - Excel - 从左到右填充单元格背景颜色 x%
- arrays - How to insert a number to each array in an array of arrays?
- python - xArray: reindex_like(method='nearest') TypeError: 不支持的操作数类型 -: 'str' 和 'str'
- c++ - 是否可以在 boost 中向结构添加额外的数据