我正在为WCF服务构建自定义UserNamePasswordValidator。我正在使用Autofac + WCF / multitenant连接服务,所有这些都整齐地安装在一起。但是,我不确定使用什么策略来连接/实现此身份验证类。
理想情况下,我会从
开始public class MyValidator : UserNamePasswordValidator {
public MyValidator(Func<Owned<IMyUserService>> userservicefactory) {
...
}
}
但是,由于WCF使用UserNamePasswordValidator的方式(唯一的选项似乎是无参数构造函数),这不是严格可能的。
所以,问题:
答案 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,您可以确定如何创建身份验证器。