UserNamePasswordValidator: когда DI и Framework сталкиваются - PullRequest
3 голосов
/ 19 июля 2011

Я создаю пользовательский UserNamePasswordValidator для службы WCF. Я подключаю сервис с Autofac + WCF / мультитенант, все аккуратно соединяются. Однако я не уверен, какую стратегию использовать для подключения / реализации этого класса аутентификации.

В идеале я бы начал с

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

Однако это не является строго возможным из-за способа, которым UserNamePasswordValidator используется WCF (кажется, что единственным параметром является конструктор без параметров).

Итак, вопросы:

  1. Я прав или есть какая-то конфигурация WCF voodoo, с которой можно настроить UserNamePasswordValidator factory ?
  2. Если «нет», то какую стратегию отката, наиболее правильную по отношению к DI, можно использовать в этом сценарии?

Ответы [ 2 ]

8 голосов
/ 20 июля 2011

Я сконфигурировал хост службы в коде при запуске или в пользовательском 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 голос
/ 20 июля 2011

Вы можете взглянуть на UserNameSecurityTokenAuthenticator, вы можете выполнить проверку в этом классе и пропустить UsernamepasswordValidator.

И вы можете реализовать свой собственный ServiceCredentialsSecurityTokenManager, который вы можете определить, как создать аутентификатор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...