方法: ASP.NET メンバーシップ プロバイダーを使用する

ASP.NET メンバーシップ プロバイダーを使用すると、ASP.NET 開発者は、ユーザーが一意のユーザー名とパスワードの組み合わせを作成できる Web サイトを作成できます。 この機能を使用すれば、ユーザーはだれでもサイトでアカウントを作成し、そのサイトにサインインして、サービスに排他的にアクセスできます。 これは、ユーザーが Windows ドメイン内にアカウントを持っていることが必要な Windows セキュリティとは対照的です。 自分の資格情報 (ユーザー名とパスワードの組み合わせ) を提示したユーザーは、だれでもサイトとそのサービスを使用できます。

サンプル アプリケーションについては、「メンバーシップとロール プロバイダー」を参照してください。 ASP.NET のロール プロバイダー機能の使用方法については、「方法: ASP.NET のロール プロバイダーとサービスを使用する」を参照してください。

メンバーシップ機能では、SQL Server データベースを使用してユーザー情報を格納する必要があります。 メンバーシップ機能には、パスワードを忘れたユーザーへの質問を行うためのメソッドも含まれています。

Windows Communication Foundation (WCF) 開発者は、セキュリティを向上させるためにこれらの機能を利用できます。 この機能を WCF アプリケーションに統合した場合、ユーザーはユーザー名とパスワードの組み合わせを WCF クライアント アプリケーションに提示する必要があります。 データを WCF サービスに転送するには、WSHttpBinding (構成では <wsHttpBinding>) など、ユーザー名とパスワードの資格情報がサポートされるバインディングを使用し、クライアントの資格情報の種類を UserName に設定します。 サービス側では、WCF セキュリティが、ユーザー名とパスワードに基づいてユーザーを認証し、ASP.NET ロールによって指定されるロールを割り当てます。

Note

WCF では、ユーザー名とパスワードの組み合わせ、またはその他のユーザー情報をデータベースに格納するメソッドは提供されません。

メンバーシップ プロバイダーを構成するには

  1. Web.config ファイルで、<system.web> 要素の下に <membership> 要素を作成します。

  2. <membership> 要素を作成します。

  3. <providers> 要素の子として、<clear /> 要素を追加し、プロバイダーのコレクションをフラッシュします。

  4. <clear /> 要素の下に <add> 要素を作成し、nametypeconnectionStringNameapplicationNameenablePasswordRetrievalenablePasswordResetrequiresQuestionAndAnswerrequiresUniqueEmailpasswordFormat の各属性を適切な値に設定します。 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>
    

ユーザー名/パスワードの組み合わせを受け入れるようにサービス セキュリティを構成するには

  1. 構成ファイルの <system.serviceModel> 要素の下に、<bindings> 要素を追加します。

  2. <wsHttpBinding> を bindings セクションに追加します。 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. <system.serviceModel> 要素の子として <behaviors> 要素を追加します。

  2. <serviceBehaviors><behaviors> 要素に追加します。

  3. <behavior> を追加し、name 属性を適切な値に設定します。

  4. <serviceCredentials><behavior> 要素に追加します。

  5. <userNameAuthentication><serviceCredentials> 要素に追加します。

  6. userNamePasswordValidationMode 属性を MembershipProvider に設定します。

    重要

    userNamePasswordValidationMode 値が設定されていない場合、ASP.NET メンバーシップ プロバイダーの代わりに Windows 認証が WCF で使用されます。

  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>

関連項目