4

WS-Addressing、WS-Security、および TLS を含む SOAP 1.1 要求を作成するように WCF クライアントを構成しようとしています。

セキュリティ要件は、メッセージにユーザー名トークン、TimeStamp が含まれていること、および含まれている BinarySecurityToken を使用して TimeStamp が署名されていることです。

次のリンクの例を使用して、WCF クライアント バインディングを作成しました。HTTPS がトランスポート メカニズムとして使用され、MessageSecurity が UsernameOverTransport に基づくように、例を少し変更しました (以下を参照)。

            HttpsTransportBindingElement httpsTransport = new HttpsTransportBindingElement();            
        // the message security binding element will be configured to require 2 tokens:
        // 1) A username-password encrypted with the service token
        // 2) A client certificate used to sign the message

        // Instantiate a binding element that will require the username/password token in the message (encrypted with the server cert)
        TransportSecurityBindingElement messageSecurity = SecurityBindingElement.CreateUserNameOverTransportBindingElement();

        // Create supporting token parameters for the client X509 certificate.
        X509SecurityTokenParameters clientX509SupportingTokenParameters = new X509SecurityTokenParameters();
        // Specify that the supporting token is passed in message send by the client to the service
        clientX509SupportingTokenParameters.InclusionMode = SecurityTokenInclusionMode.AlwaysToRecipient;
        // Turn off derived keys
        clientX509SupportingTokenParameters.RequireDerivedKeys = false;
        // Augment the binding element to require the client's X509 certificate as an endorsing token in the message
        messageSecurity.EndpointSupportingTokenParameters.Endorsing.Add(clientX509SupportingTokenParameters);

        // Create a CustomBinding based on the constructed security binding element.
        return new CustomBinding(messageSecurity, httpsTransport);

このクライアントによって生成される SOAP メッセージは、呼び出しているサービスの要件をほぼ満たしています。唯一の問題は、wsa:To アドレスと TimeStamp アドレスが署名されていることです。

どの WCF ヘッダーが署名されているかを正確に指定する方法はありますか? クライアントを制限する必要があるため、TimeStamp ヘッダーのみに署名します。

4

2 に答える 2