Можете ли вы использовать пользовательский поставщик членства с userNamePasswordValidationMode?
Каждый пример, который я вижу, использует поставщика членства по умолчанию с userNamePasswordValidationMode, но могу ли я указать MembershipProvider для userNamePasswordValidationMode в ServiceCredentials для службы REST WCF, если у меня есть пользовательский поставщик членства? Является ли следующий маршрут лучшим, если это возможно:
Создайте пользовательский поставщик членства, который реализует членство поставщика.
Создайте CustomUserNamePasswordValidator, который реализует UserNamePasswordValidator, и переопределите метод Validate.
В методе 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