UserNamePasswordValidator:当DI和Framework发生冲突时

时间:2011-07-19 18:40:01

标签: wcf dependency-injection autofac

我正在为WCF服务构建自定义UserNamePasswordValidator。我正在使用Autofac + WCF / multitenant连接服务,所有这些都整齐地安装在一起。但是,我不确定使用什么策略来连接/实现此身份验证类。

理想情况下,我会从

开始
public class MyValidator : UserNamePasswordValidator {
    public MyValidator(Func<Owned<IMyUserService>> userservicefactory) {
        ...
    }
}

但是,由于WCF使用UserNamePasswordValidator的方式(唯一的选项似乎是无参数构造函数),这不是严格可能的。

所以,问题:

  1. 我是否正确或是否有一些可以配置UserNamePasswordValidator factory 的WCF配置伏都教?
  2. 如果“否”,在这种情况下可以使用的“最正确的”回退策略是什么?

2 个答案:

答案 0 :(得分:8)

我在启动时或在自定义ServiceHostFactory中的代码中配置了服务主机。

从XML配置中,我删除了

<userNameAuthentication 
          userNamePasswordValidationMode="Custom"
          customUserNamePasswordValidatorType="Common.MyCustomUsernamePasswordValidator, Common"/ -->

因为我在托管之前配置了我的容器:

var auth = host.Credentials.UserNameAuthentication;
auth.UserNamePasswordValidationMode = UserNamePasswordValidationMode.Custom;
auth.CustomUserNamePasswordValidator = container.Resolve<Common.MyCustomUsernamePasswordValidator>();

答案 1 :(得分:1)

您可以查看UserNameSecurityTokenAuthenticator,您可以在此类中进行验证并跳过UsernamepasswordValidator。

您可以实现自己的ServiceCredentialsSecurityTokenManager,您可以确定如何创建身份验证器。