作法:使用 ASP.NET 成員資格提供者
ASP.NET 成員資格提供者是能夠讓 ASP.NET 開發人員建立網站的功能,而網站可以讓使用者建立專屬的使用者名稱和密碼組合。 任何使用者都可以使用這個功能在網站上建立帳戶,並登入以擁有網站與其服務的獨佔存取權。 這與 Windows 安全性形成對比,因為 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>
<providers> 項目之下建立<providers>
項目。新增
<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
。將
clientCredentialType
項目的<message>
屬性設定為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>