【问题标题】:Can you use a custom membership provider with userNamePasswordValidationMode?您可以将自定义成员资格提供程序与 userNamePasswordValidationMode 一起使用吗?
【发布时间】:2011-04-21 00:13:33
【问题描述】:
我看到的每个示例都使用带有 userNamePasswordValidationMode 的默认成员资格提供程序,但是如果我有自定义成员资格提供程序,我可以在 WCF REST 服务的 ServiceCredentials 中为 userNamePasswordValidationMode 指定 MembershipProvider 吗?如果可能的话,以下路线是否是最好的选择:
创建一个实现 Membership Provider 的自定义成员资格提供程序。
创建一个实现 UserNamePasswordValidator 的 CustomUserNamePasswordValidator 并覆盖 Validate 方法。
在 Validate 方法中,验证用户是否存在于数据库中。
我遇到的问题是,如果我的服务中有一个登录方法,并且它是从 URL 为 http://test.com/service.svc/login 的 Web 浏览器调用的,我该如何获取用户名和密码。假设用户名和密码可以输入到网页中,也可以来自智能设备应用程序(android、iphone 等)
【问题讨论】:
标签:
wcf
rest
wcf-security
custom-membershipprovider
【解决方案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 身份验证服务使用非默认成员资格提供程序