Можете ли вы использовать пользовательский поставщик членства с userNamePasswordValidationMode?

Каждый пример, который я вижу, использует поставщика членства по умолчанию с userNamePasswordValidationMode, но могу ли я указать MembershipProvider для userNamePasswordValidationMode в ServiceCredentials для службы REST WCF, если у меня есть пользовательский поставщик членства? Является ли следующий маршрут лучшим, если это возможно:

  1. Создайте пользовательский поставщик членства, который реализует членство поставщика.

  2. Создайте CustomUserNamePasswordValidator, который реализует UserNamePasswordValidator, и переопределите метод Validate.

  3. В методе Validate проверьте, существует ли пользователь в базе данных.

У меня возникают следующие проблемы: если у меня есть метод входа в службу и он вызывается из веб-браузера с URL-адресом http://test.com/service.svc/login, как я могу получить имя пользователя и пароль? Предположим, что имя пользователя и пароль могут быть введены на веб-странице или могут быть получены из приложения для смарт-устройств (Android, iPhone и т. Д.)

1 ответ

Решение

Вы должны быть в состоянии: [HowToUseNonDefaultMembershipProvider][1] На шаге 1 на странице есть две дополнительные ссылки, первая показывает вам, как создать класс поставщика членства, вторая показывает необходимые записи конфигурации. В то время как вторая ссылка говорит об указании провайдера по умолчанию, вы можете указать любое количество провайдеров в конфигурации, один из них будет по умолчанию:

<system.web>
    <membership defaultProvider="SqlProvider">
        <providers>
            <clear />
            <add name="SqlProvider"
  type="System.Web.Security.SqlMembershipProvider"
  connectionStringName="MySqlConnection"
  applicationName="MyApplication"
  enablePasswordRetrieval="false"
  enablePasswordReset="true"
  requiresQuestionAndAnswer="true"
  requiresUniqueEmail="true"
  passwordFormat="Hashed" />
            <add name="MyProvider"
                     type="MyCompany.MyNamespace.MyMembershipProvider" />
        </providers>
    </membership>
</system.web>

Теперь в примере кода по ссылке выше у вас может быть строка в методе AuthenticationService_Authenticating, например, так:

e.Authenticated = Membership.Providers["MyProvider"].ValidateUser(e.UserName, e.Password);

В вашем пользовательском классе провайдера вы бы реализовали метод ValidateUser. Он может содержать любую логику, необходимую для проверки имени пользователя и пароля (которые передаются методу).

[1]: http://how/: использовать нестандартный поставщик членства для службы аутентификации WCF

Другие вопросы по тегам