我看到的每个示例都使用带有userNamePasswordValidationMode的默认成员资格提供程序,但如果我有自定义成员资格提供程序,是否可以在WCF REST服务的ServiceCredentials中为userNamePasswordValidationMode指定MembershipProvider?如果可能的话,以下路线是最好的:
创建实现成员资格提供程序的自定义成员资格提供程序。
创建一个实现UserNamePasswordValidator的CustomUserNamePasswordValidator并覆盖验证方法。
在Validate方法中,验证数据库中是否存在用户。
我遇到的问题是,如果我的服务中有登录方法,并且从带有网址http://test.com/service.svc/login的网络浏览器调用,我该如何获取用户名和密码。假设用户名和密码可以输入到网页中,也可以来自智能设备应用程序(android,iphone等)
答案 0 :(得分:0)
你应该能够: [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 to:对WCF身份验证服务使用非默认成员资格提供程序