我们正在使用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运行时会自动调用它。
我们真的可以在上面的类中添加依赖注入支持吗?
答案 0 :(得分: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容器为创建服务主机的程序部分提供依赖项。