您可以使用带有userNamePasswordValidationMode的自定义成员资格提供程序吗?

时间:2010-10-04 20:34:26

标签: wcf rest wcf-security custom-membershipprovider

我看到的每个示例都使用带有userNamePasswordValidationMode的默认成员资格提供程序,但如果我有自定义成员资格提供程序,是否可以在WCF REST服务的ServiceCredentials中为userNamePasswordValidationMode指定MembershipProvider?如果可能的话,以下路线是最好的:

  1. 创建实现成员资格提供程序的自定义成员资格提供程序。

  2. 创建一个实现UserNamePasswordValidator的CustomUserNamePasswordValidator并覆盖验证方法。

  3. 在Validate方法中,验证数据库中是否存在用户。

  4. 我遇到的问题是,如果我的服务中有登录方法,并且从带有网址http://test.com/service.svc/login的网络浏览器调用,我该如何获取用户名和密码。假设用户名和密码可以输入到网页中,也可以来自智能设备应用程序(android,iphone等)

1 个答案:

答案 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身份验证服务使用非默认成员资格提供程序