如何:使用 ASP.NET 成员资格提供程序

ASP.NET 成员资格提供程序是一项功能,可供 ASP.NET 开发者用于创建允许用户创建唯一用户名和密码组合的网站。 使用此工具,任何用户都可以在该网站上建立帐户,并登录网站以便独占访问该网站及其服务。 这与要求用户在 Windows 域中具有帐户的 Windows 安全完全不同。 所有提供凭据(用户名/密码组合)的用户都可以使用该网站及其服务。

有关示例应用程序,请参阅成员资格和角色提供程序。 有关使用 ASP.NET 角色提供程序功能的信息,请参阅如何:将 ASP.NET 角色提供程序与服务一起使用

成员资格功能要求使用 SQL Server 数据库来存储用户信息。 此功能还包括用于向忘记密码的用户提示问题的方法。

Windows Communication Foundation (WCF) 开发者可以出于安全目的利用这些功能。 当集成到 WCF 应用程序中时,用户必须向 WCF 客户端应用程序提供用户名/密码组合。 要将数据传输到 WCF 服务,请使用支持用户名/密码凭据的绑定,例如 WSHttpBinding(在配置中为 <wsHttpBinding>)并将客户端凭据类型设置为 UserName。 在服务上,WCF 安全基于用户名和密码对用户进行身份验证,还会分配由 ASP.NET 角色指定的角色。

注意

WCF 不提供使用用户名/密码组合或其他用户信息填充数据库的方法。

配置成员资格提供程序

  1. 在 Web.config 文件中,在 <system.web> 元素下创建一个 <membership> 元素。

  2. <membership> 元素。

  3. 添加一个 <clear /> 元素作为 <providers> 元素的子级,以刷新提供程序的集合。

  4. <clear /> 元素下创建一个 <add> 元素,并将其以下属性设置为适当的值:nametypeconnectionStringNameapplicationNameenablePasswordRetrievalenablePasswordResetrequiresQuestionAndAnswerrequiresUniqueEmailpasswordFormatname 属性以后作为一个值在配置文件中使用。 下面的示例将其设置为 SqlMembershipProvider

    下面的示例显示配置节。

    <!-- Configure the Sql Membership Provider -->
    <membership defaultProvider="SqlMembershipProvider" userIsOnlineTimeWindow="15">
      <providers>
        <clear />
          <add
            name="SqlMembershipProvider"
            type="System.Web.Security.SqlMembershipProvider"
            connectionStringName="SqlConn"
            applicationName="MembershipAndRoleProviderSample"
            enablePasswordRetrieval="false"
            enablePasswordReset="false"
            requiresQuestionAndAnswer="false"
            requiresUniqueEmail="true"
            passwordFormat="Hashed" />
      </providers>
    </membership>
    

配置服务安全以接受用户名/密码组合

  1. 在配置文件中,在 <system.serviceModel> 元素下添加一个 <bindings> 元素。

  2. <wsHttpBinding> 添加到绑定节。 有关创建 WCF 绑定元素的详细信息,请参阅如何:在配置中指定服务绑定

  3. mode 元素的 <security> 属性设置为 Message

  4. 将 <message> 元素的 clientCredentialType 属性设置为 UserName。 这将指定将用户名/密码对用作客户端的凭据。

    下面的示例显示绑定的配置代码。

    <system.serviceModel>
    <bindings>
      <wsHttpBinding>
      <!-- Set up a binding that uses UserName as the client credential type -->
        <binding name="MembershipBinding">
          <security mode ="Message">
            <message clientCredentialType ="UserName"/>
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    </system.serviceModel>
    

配置服务以使用成员资格提供程序

  1. 添加一个 <behaviors> 元素作为 <system.serviceModel> 元素的子级

  2. 将一个 <serviceBehaviors> 添加到 <behaviors> 元素中。

  3. 添加一个 <behavior>,并将 name 属性设置为适当的值。

  4. <serviceCredentials> 添加到 <behavior> 元素中。

  5. <userNameAuthentication> 添加到 <serviceCredentials> 元素中。

  6. userNamePasswordValidationMode 属性设置为 MembershipProvider

    重要

    如果未设置 userNamePasswordValidationMode 值,WCF 将使用 Windows 身份验证,而非 ASP.NET 成员资格提供程序。

  7. membershipProviderName 属性设置为提供程序的名称(在本主题的第一个过程中添加提供程序时指定)。 下面的示例演示至此为止的 <serviceCredentials> 片段。

    <behaviors>
       <serviceBehaviors>
          <behavior name="MyServiceBehavior">
             <serviceCredentials>
                <userNameAuthentication
                userNamePasswordValidationMode="MembershipProvider"
                membershipProviderName="SqlMembershipProvider" />
             </serviceCredentials>
          </behavior>
       </serviceBehaviors>
    </behaviors>
    

示例

下面的代码示例演示使用 ASP 成员资格功能的服务的配置。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service behaviorConfiguration="MyServiceBehavior" name="Microsoft.Samples.GettingStarted.CalculatorService">
        <endpoint address="http://microsoft.com/WCFservices/Calculator"
          binding="wsHttpBinding" bindingConfiguration="MembershipBinding"
          name="ASPmemberUserName" contract="Microsoft.Samples.GettingStarted.ICalculator" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyServiceBehavior">
          <serviceCredentials>
            <userNameAuthentication
              userNamePasswordValidationMode="MembershipProvider"
              membershipProviderName="SqlMembershipProvider" />
          </serviceCredentials>
        </behavior>
          </serviceBehaviors>
    </behaviors>
    <bindings>
      <wsHttpBinding>
        <binding name="MembershipBinding">
          <security mode="Message">
            <message clientCredentialType="UserName" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
  </system.serviceModel>
</configuration>

另请参阅