方法: 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 では、ユーザー名とパスワードの組み合わせ、またはその他のユーザー情報をデータベースに格納するメソッドは提供されません。
メンバーシップ プロバイダーを構成するには
Web.config ファイルで、
<system.web>
要素の下に<membership>
要素を作成します。<membership>
要素を作成します。<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> を bindings セクションに追加します。 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>
メンバーシップ プロバイダーを使用するようにサービスを構成するには
<system.serviceModel>
要素の子として <behaviors> 要素を追加します。<serviceBehaviors> を
<behaviors>
要素に追加します。<behavior> を追加し、
name
属性を適切な値に設定します。<serviceCredentials> を
<behavior>
要素に追加します。<userNameAuthentication> を
<serviceCredentials>
要素に追加します。userNamePasswordValidationMode
属性をMembershipProvider
に設定します。重要
userNamePasswordValidationMode
値が設定されていない場合、ASP.NET メンバーシップ プロバイダーの代わりに Windows 認証が WCF で使用されます。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>