首页 > 解决方案 > WCF:匹配特定的 WS-Security 方案(签名、加密、用户密码)

问题描述

我正在尝试匹配来自供应商的特定 WS-Security 规范。以下适用于 SOAP UI,我现在尝试在 C# WCF 中重新创建它(针对 .NET 4.7.2 或 4.8):

到目前为止,我尝试的所有内容似乎都加密了 WS-Security 标头中的所有内容,但时间戳除外。

参考文献如下:


SOAP UI 设置 - 签名:

SOAPUI-签名

SOAP UI 设置 - 加密:

SOAPUI-加密

标签: asp.netwcfsoapws-security

解决方案


您可以尝试使用 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 以应用它:

在此处输入图像描述


推荐阅读