Share via


方法 : WCF 認証サービスに既定以外のメンバシップ プロバイダを使用する

更新 : 2007 年 11 月

ここでは、WCF (Windows Communication Foundation) を使用して ASP.NET 認証サービスを呼び出すときに、プログラム上でメンバシップ プロバイダを選択する方法について説明します。実行時に取得する情報を基に、さまざまなメンバシップ プロバイダを使用してユーザーを認証する必要があるときに、既定以外のメンバシップ プロバイダを使用できます。既定以外のメンバシップ プロバイダを使用して認証を行うには、Authenticating イベントのイベント ハンドラを作成します。

SOAP 1.1 メッセージを送信および処理できるクライアント アプリケーション (Java アプリケーションなど) でユーザーをログオンするには、認証サービスに WCF を使用します。これにより、クライアント アプリケーションでは、ASP.NET Web アプリケーションと同じユーザーの資格情報を使用してユーザーを認証できます。

既定以外のメンバシップ プロバイダを使用して認証するには

  1. 使用するメンバシップ プロバイダを作成して構成します。

    詳細については、「メンバシップ プロバイダの実装」および「ASP.NET アプリケーションの設定によるメンバシップの使用」を参照してください。

  2. Global.asax ファイルで、Authenticating イベントのイベント ハンドラを作成し、カスタムのメンバシップ プロバイダを呼び出してユーザーの資格情報を認証するコードを追加します。

    次の例では、資格情報の認証を行う Authenticating イベントのイベント ハンドラを示します。認証には、ContosoSqlProvider、FabrikamSqlProvider という名前の各プロバイダ、または既定のメンバシップ プロバイダが使用されます。ユーザーの資格情報は、ユーザーの種類に基づき、異なるデータベースに格納されています。イベント ハンドラでは、ユーザー名として示される電子メール アドレスを基に、使用するプロバイダを判断します。

    Sub AuthenticationService_Authenticating _
       (ByVal sender As Object, _
        ByVal e As System.Web.ApplicationServices.AuthenticatingEventArgs)
    
        If (e.Username.IndexOf("@contoso.com") >= 0) Then
            e.Authenticated = Membership.Providers("ContosoSqlProvider").ValidateUser(e.Username, e.Password)
        ElseIf (e.Username.IndexOf("@fabrikam.com") >= 0) Then
            e.Authenticated = Membership.Providers("FabrikamSqlProvider").ValidateUser(e.Username, e.Password)
        Else
            e.Authenticated = Membership.Provider.ValidateUser(e.Username, e.Password)
        End If
        e.AuthenticationIsComplete = True
    End Sub
    
    void AuthenticationService_Authenticating(object sender, System.Web.ApplicationServices.AuthenticatingEventArgs e)
    {
        if (e.UserName.IndexOf("@contoso.com") >= 0)
        {
            e.Authenticated = Membership.Providers["ContosoSqlProvider"].ValidateUser(e.UserName, e.Password);
        }
        else if (e.UserName.IndexOf("@fabrikam.com") >= 0)
        {
            e.Authenticated = Membership.Providers["FabrikamSqlProvider"].ValidateUser(e.UserName, e.Password);
        }
        else
        {
            e.Authenticated = Membership.Provider.ValidateUser(e.UserName, e.Password);
        }
        e.AuthenticationIsComplete = true;
    }
    
  3. Global.asax ファイルの Application_Start メソッドで、イベント ハンドラを Authenticating イベントに関連付けます。

    次の例では、イベント ハンドラを Authenticating イベントに関連付ける方法を示します。

    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
        AddHandler System.Web.ApplicationServices.AuthenticationService.Authenticating, _
          AddressOf Me.AuthenticationService_Authenticating
    End Sub
    
    void Application_Start(object sender, EventArgs e)
    {
        System.Web.ApplicationServices.AuthenticationService.Authenticating +=
            new EventHandler<System.Web.ApplicationServices.AuthenticatingEventArgs>(AuthenticationService_Authenticating);
    }
    
  4. SOAP 1.1 メッセージの読み取りおよび処理ができるアプリケーションから、認証サービスを呼び出します。

コードのコンパイル方法

前の例を実行するには、Web サーバーで認証サービスを設定しておく必要があります。詳細については、「方法 : WCF 認証サービスを有効にする」を参照してください。

セキュリティ

認証サービスには、常に SSL (Secure Sockets Layer) を使用して HTTPS プロトコルによってアクセスします。

参照

概念

Windows Communication Foundation の認証サービスの概要

参照

AuthenticationService

AuthenticatingEventArgs

その他の技術情報

メンバシップを使用したユーザーの管理