共用方式為


HOW TO:使用 ASP.NET 成員資格提供者

ASP.NET 成員資格提供者是能夠讓 ASP.NET 程式開發人員建立網站的功能,而網站可以讓使用者建立專屬的使用者名稱和密碼組合。 任何使用者都可以使用這個功能在網站上建立帳戶,並登入以擁有網站與其服務的獨佔存取權。 這與 Windows 安全性形成對比,因為 Windows 安全性需要使用者有 Windows 網域的帳戶。 相反的,任何使用者只要提供認證 (使用者名稱/密碼組合) 都可以使用該網站與其服務。

如需範例應用程式,請參閱成員資格和角色提供者。 如需有關使用 ASP.NET 角色提供者功能的資訊,請參閱 HOW TO:使用 ASP.NET 角色提供者搭配服務

成員資格功能需要使用 SQL Server 資料庫儲存使用者資訊。 這個功能也包含對忘記密碼的任何使用者提示問題的方法。

Windows Communication Foundation (WCF) 程式開發人員可以針對安全性目的利用這些功能。 當整合至 WCF 應用程式時,使用者必須將使用者名稱/密碼組合提供給 WCF 用戶端應用程式。 若要將資料傳輸至 WCF 服務,請使用支援使用者名稱/密碼認證的繫結,例如 WSHttpBinding (在組態中,wsHttpBinding Element) 並且將用戶端認證類型設定為 UserName。 在服務時,WCF 安全性會根據使用者名稱與密碼驗證使用者,並且也會指派 ASP.NET 角色指定的角色。

ms731049.note(zh-tw,VS.100).gif注意:
WCF 不提供將使用者名稱/密碼組合或其他使用者資訊填入資料庫的方法。

設定成員資格提供者

  1. 在 Web.config 檔的 <system.web> 項目中,建立 <membership> 項目。

  2. <membership><providers> 項目之下建立 項目。

  3. 加入 <clear /> 項目當做 <providers> 項目的子系,以清除提供者的集合。

  4. <clear /> 項目中,使用下列已設定適當值的屬性建立 <add> 項目:nametypeconnectionStringNameapplicationNameenablePasswordRetrievalenablePasswordResetrequiresQuestionAndAnswerrequiresUniqueEmail 以及 passwordFormatname 屬性稍後會用來當做組態檔中的值。 下列範例將它設定為 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 Element 新增至繫結區段。如需詳細資訊 建立 WCF 繫結項目的詳細資訊,請參閱 HOW TO:指定組態中的服務繫結

  3. <security> 項目的 mode 屬性設定為 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 section 新增至 <behaviors> 項目。

  3. 新增 Behavior element,然後將 name 屬性設定為適當的值。

  4. <serviceCredentials> Element 新增至 <behavior> 項目中。

  5. userNameAuthentication element 新增至 <serviceCredentials> 項目中。

  6. userNamePasswordValidationMode 屬性設定為 MembershipProvider

    ms731049.Important(zh-tw,VS.100).gif 注意:
    如果沒有設定 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="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>

另請參閱

工作

HOW TO:使用 ASP.NET 角色提供者搭配服務
成員資格和角色提供者