方法 : カスタム ユーザー名およびパスワード検証を使用する

Windows Communication Foundation (WCF) では、認証にユーザー名とパスワードを使用すると、既定の Windows 認証を使用してユーザー名とパスワードが検証されます。ただし、WCF では、"検証コントロール" と呼ばれるカスタムのユーザー名/パスワード認証方式を使用できます**。ユーザー名およびパスワードのカスタム検証を組み込むには、UserNamePasswordValidator から派生するクラスを作成して構成します。

サンプル アプリケーションについては、「UserNamePassword Validator」を参照してください。

カスタムのユーザー名/パスワード検証コントロールを作成するには

  1. UserNamePasswordValidator から派生するクラスを作成します。

  2. Validate メソッドをオーバーライドして、カスタム認証方式を実装します。

    次の例のコードは、Validate メソッドをオーバーライドします。稼働環境では、このようなコードを使用しないでください。このコードをカスタムのユーザー名/パスワード検証方式に置き換えます。この場合、ユーザー名とパスワードの組み合わせをデータベースから取得する必要があります。

    クライアントに認証エラーを返すには、Validate メソッドで FaultException をスローします。

カスタムのユーザー名/パスワード検証コントロールを使用するようにサービスを構成するには

  1. 任意のトランスポート上のメッセージ セキュリティ、または HTTP(S) 上のトランスポート レベル セキュリティを使用するバインディングを構成します。

    メッセージ セキュリティを使用する場合は、メッセージ セキュリティと UserName 資格情報の種類をサポートするシステム指定のバインディングのいずれか (wsHttpBinding ElementcustomBinding Elementなど) を追加します。

    HTTP(S) 上のトランスポート レベル セキュリティを使用する場合は、wsHttpBinding Elementおよび <basicHttpBinding> のいずれか、または HTTP(S) と Basic 認証方式を使用する customBinding Elementを追加します。

    Aa702565.note(ja-jp,VS.90).gifメモ :
    .NET Framework Version 3.5 以降を使用する場合は、メッセージおよびトランスポート セキュリティでカスタムのユーザー名/パスワード検証コントロールを使用できます。.NET Framework 3.0 では、カスタムのユーザー名/パスワード検証コントロールを使用できるのは、メッセージ セキュリティだけです。

    1. 構成ファイルの <system.ServiceModel> 要素の下に、<bindings> 要素を追加します。
    2. バインディング セクションに、wsHttpBinding Elementまたは <basicHttpBinding> 要素を追加します。WCF のバインディング要素の作成詳細については、 、「方法 : 構成でサービス バインディングを指定する」を参照してください。
    3. security element of wsHttpBindingまたは <security> of <basicHttpBinding>mode 属性を MessageTransport、または TransportWithMessageCredential に設定します。
    4. message element of wsHttpBindingまたは <transport> of <wsHttpBinding>clientCredentialType 属性を設定します。
      メッセージ セキュリティを使用する場合は、message element of wsHttpBindingclientCredentialType 属性を UserName に設定します。
      HTTP(S) 上でトランスポート レベルのセキュリティを使用する場合は、<transport> of <wsHttpBinding> または <transport> of <basicHttpBinding>clientCredentialType 属性を Basic に設定します。
      Aa702565.note(ja-jp,VS.90).gifメモ :
      WCF サービスがインターネット インフォメーション サービス (IIS) でトランスポート レベルのセキュリティを使用してホストされており、UserNamePasswordValidationMode プロパティが Custom に設定されている場合、カスタム認証方式では Windows 認証のサブセットが使用されます。これは、このシナリオの場合、WCF がカスタム認証を呼び出す前に IIS によって Windows 認証が実行されるためです。

    WCF バインディング要素の作成詳細については、 、「方法 : 構成でサービス バインディングを指定する」を参照してください。

    次のコード例は、バインディングの構成コードを示しています。

    <system.serviceModel> 
      <bindings>
      <wsHttpBinding>
          <binding name="Binding1">
            <security mode="Message">
              <message clientCredentialType="UserName" />
            </security>
          </binding>        
        </wsHttpBinding>
      </bindings>
    </system.serviceModel>
    
  2. 受信 UserNameSecurityToken セキュリティ トークンのユーザー名とパスワードの組み合わせを検証する際に、カスタムのユーザー名/パスワード検証コントロールを使用することを指定する動作を構成します。

    1. <system.serviceModel> 要素の子として <behaviors> 要素を追加します。

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

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

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

    5. <serviceCredentials> ElementuserNameAuthentication elementを追加します。

    6. userNamePasswordValidationModeCustom に設定します。

      Aa702565.Important(ja-jp,VS.90).gif メモ :
      userNamePasswordValidationMode 値が設定されていない場合、WCF では、カスタムのユーザー名/パスワード検証コントロールの代わりに Windows 認証が使用されます。

    7. customUserNamePasswordValidatorType を、カスタムのユーザー名/パスワード検証コントロールを表す型に設定します。

    次の例に、この時点での <serviceCredentials> のフラグメントを示します。

    <serviceCredentials>
      <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="Microsoft.ServiceModel.Samples.CalculatorService.CustomUserNameValidator, service" />
    </serviceCredentials>
    

カスタムのユーザー名/パスワード検証コントロールを作成する方法を次のコード例に示します。稼働環境では、Validate メソッドをオーバーライドするコードを使用しないでください。このコードをカスタムのユーザー名/パスワード検証方式に置き換えます。この場合、ユーザー名とパスワードの組み合わせをデータベースから取得する必要があります。

関連項目

タスク

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

リファレンス

UserNamePasswordValidator

その他の技術情報

認証