如何:使用 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 不提供使用用户名/密码组合或其他用户信息填充数据库的方法。
配置成员资格提供程序
在 Web.config 文件中,在
<system.web>
元素下创建一个<membership>
元素。在
<membership>
元素。添加一个
<clear />
元素作为<providers>
元素的子级,以刷新提供程序的集合。在
<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> 添加到绑定节。 有关创建 WCF 绑定元素的详细信息,请参阅如何:在配置中指定服务绑定。
将
mode
元素的<security>
属性设置为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>
配置服务以使用成员资格提供程序
添加一个 <behaviors> 元素作为
<system.serviceModel>
元素的子级将一个 <serviceBehaviors> 添加到
<behaviors>
元素中。添加一个 <behavior>,并将
name
属性设置为适当的值。将 <serviceCredentials> 添加到
<behavior>
元素中。将 <userNameAuthentication> 添加到
<serviceCredentials>
元素中。将
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="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>