【问题标题】:Depedency injection in custom X509CertificateValidator class in WCF using Unity使用 Unity 在 WCF 中自定义 X509CertificateValidator 类中的依赖注入
【发布时间】:2012-06-15 08:59:53
【问题描述】:

我们正在使用 WCF 服务以及基于证书的身份验证和 wsHttpBinding。

我已经编写了自定义类来进行身份验证。该类继承自 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>

我正在使用 Unity.WCF nuget 包向 WCF 添加 DI 支持。我的问题是我无法在上面的类中注入依赖项。 Unity 不提供此类服务。调用 WCF 时,WCF 运行时会自动调用它。

我们真的可以在上面的类中添加依赖注入支持吗?

【问题讨论】:

    标签: wcf dependency-injection unity-container x509certificate


    【解决方案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 容器为程序中创建服务主机的部分提供依赖项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      • 2015-03-21
      • 1970-01-01
      • 2010-11-05
      • 2023-01-30
      相关资源
      最近更新 更多