0

我们使用WCF服务以及基于证书的身份验证和wsHttpBinding。使用Unity在WCF中定制X509CertificateValidator类中的依赖注入

我写了自定义类来进行身份验证。该类从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包添加DI支持的WCF。我的问题是我无法在上面的类中注入依赖项。 Unity不提供此类。当WCF被调用时,它被WCF运行时自动调用。

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

回答

1

您仍然可以依赖注入的自定义证书验证:

您可以通过constuctor接受它:

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容器将依赖项提供给创建服务主机的程序部分。