0

wsHttpBindingによる証明書ベースの認証とともにWCFサービスを使用しています。

認証を行うカスタムクラスを作成しました。このクラスは、System.IdentityModel.Selectors.X509CertificateValidator から継承されています。

 public class MyX509CertificateValidator : System.IdentityModel.Selectors.X509CertificateValidator
    {


        public override void Validate(X509Certificate2 certificate)
        {
            /// Custom code goes here
        }
    }

このクラスは web.config で構成されます

 <behavior name="customBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceCredentials>
            <clientCertificate>
              <authentication certificateValidationMode="Custom"
                              customCertificateValidatorType="**SampleClass.MyX509CertificateValidator** ,SampleClass"
                              revocationMode="NoCheck"/>
            </clientCertificate>
            <serviceCertificate
              findValue="XXXXXXXXXXXXXXXX"
              x509FindType="FindByThumbprint"
              storeLocation="CurrentUser"
              storeName="My"/>
          </serviceCredentials>

WCF に DI サポートを追加するために Unity.WCF nuget パッケージを使用しています。私の問題は、上記のクラス内に依存関係を注入できないことです。このクラスは Unity によって提供されません。WCFが呼び出されると、WCFランタイムによって自動的に呼び出されます。

上記のクラスに依存性注入のサポートを本当に追加できますか?

4

1 に答える 1

1

カスタム証明書バリデーターに依存関係を挿入することもできます。

コンストラクタを介して受け入れることができます:

public class CertificateValidator : X509CertificateValidator
{
    private IMyDependency _dependency;

    public CertificateValidator(IMyDependency dependency)
    {
        _dependency = dependency;
    }

    public override void Validate(X509Certificate2 certificate)
    {
        ...

そして、サービス ホストを構成するときにそれを渡します。

serviceHost.Credentials.ClientCertificate.Authentication.CustomCertificateValidator =
    new CertificateValidator(dependency);

IOC コンテナーを使用して、サービス ホストを作成するプログラムの一部に依存関係を提供できます。

于 2012-10-05T08:33:45.357 に答える