如何:使用 ASP.NET 成员资格提供程序
ASP.NET 成员资格提供程序是一种功能,可供 ASP.NET 开发人员用于创建允许用户创建唯一用户名和密码组合的网站。使用此工具,任何用户都可以在该网站上建立帐户,并登录网站以便独占访问该网站及其服务。这与要求用户在 Windows 域中具有帐户的 Windows 安全完全不同。所有提供凭据(用户名/密码组合)的用户都可以使用该网站及其服务。
有关示例应用程序,请参见成员资格和角色提供程序。有关使用 ASP.NET 角色提供程序功能的信息,请参见如何:将 ASP.NET 角色提供程序与服务一起使用。
成员资格功能要求使用 SQL Server 数据库来存储用户信息。此功能还包括用于向忘记密码的用户提示问题的方法。
Windows Communication Foundation (WCF) 开发人员可以出于安全目的利用这些功能。当集成到 WCF 应用程序中时,用户必须向 WCF 客户端应用程序提供用户名/密码组合。若要将数据传输到 WCF 服务,请使用支持用户名/密码凭据的绑定,如 WSHttpBinding(在配置中为 wsHttpBinding Element)并将客户端凭据类型设置为 UserName。在服务上,WCF 安全基于用户名和密码对用户进行身份验证,还会分配由 ASP.NET 角色指定的角色。
![]() |
---|
WCF 不提供使用用户名/密码组合或其他用户信息填充数据库的方法。 |
配置成员资格提供程序
在 Web.config 文件中,在 <system.web> 元素下面,创建一个 <membership> 元素。
在 <membership><providers> 元素之下创建一个 元素。
作为 <providers> 元素的子级添加一个 <clear /> 元素以刷新提供程序的集合。
在 <clear /> 元素下面,创建一个 <add> 元素,并将其以下属性设置为适当的值:name、type、connectionStringName、applicationName、enablePasswordRetrieval、enablePasswordReset、requiresQuestionAndAnswer、requiresUniqueEmail 和 passwordFormat。name 属性以后作为一个值在配置文件中使用。下面的示例将其设置为
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>
配置服务安全以接受用户名/密码组合
在配置文件中,在 <system.ServiceModel> 元素下面添加一个 <bindings> 元素。
向绑定部分添加 wsHttpBinding Element。有关创建 WCF 绑定元素的更多信息,请参见如何:在配置中指定服务绑定。
将 <security> 元素的 mode 属性设置为 Message。
将 <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>
配置服务以使用成员资格提供程序
作为 <system.serviceModel> 元素的子级添加一个 <behaviors> 元素。
向 <behaviors> 元素中添加一个 serviceBehaviors section。
添加一个 Behavior element并将 name 属性设置为适当的值。
向 <behavior> 元素中添加一个 <serviceCredentials> Element。
向 <serviceCredentials> 元素中添加一个 userNameAuthentication element。
将 userNamePasswordValidationMode 属性设置为 MembershipProvider。
注意:
如果未设置 userNamePasswordValidationMode 值,WCF 将使用 Windows 身份验证代替 ASP.NET 成员资格提供程序。 将 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="https://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>