次の方法で共有


方法 : WCF 認証サービスから認証 Cookie をカスタマイズする

更新 : 2007 年 11 月

ここでは、ASP.NET 認証サービス用の認証 Cookie (チケット) が Windows Communication Foundation (WCF) サービスとして使用されるときの、認証 Cookie のカスタマイズ方法について説明します。認証中にユーザー固有のデータを認証 Cookie に格納する場合に、認証 Cookie をカスタマイズします。

Bb398778.alert_note(ja-jp,VS.90).gifメモ :

一般的には、ユーザー固有のデータは Cookie に格納するよりも、ASP.NET プロファイル プロパティに格納することをお勧めします。プロファイル プロパティ データは、1 台のコンピュータに関連付けられることも、Cookie の有効期間に制限されることもありません。また、プロファイル プロパティの方が安全にユーザー データを格納できます。Cookie のコンテンツのカスタマイズは、機密ではない少量のデータがあり、ASP.NET のプロファイル機能を使用しない場合に便利です。

ユーザーの資格情報の妥当性が確認された後、認証 Cookie が設定される前に、認証サービスが CreatingCookie イベントを発生させます。認証 Cookie をカスタマイズするには、CreatingCookie のイベント ハンドラを作成し、認証 Cookie を自分で管理します。イベント ハンドラに渡される CreatingCookieEventArgs オブジェクトを通じて、ユーザー名、パスワード、およびカスタムの資格情報にアクセスできます。

SOAP 1.1 メッセージを送信および処理できるクライアント アプリケーション (Java アプリケーションなど) からユーザーをログインさせる場合、WCF 実装の認証サービスを使用します。

  1. Web アプリケーションの Global.asax ファイルで、CreatingCookie イベントのイベント ハンドラを作成します。

  2. ハンドラで、Cookie の CustomCredential プロパティに情報を追加します。

    CustomCredential プロパティの値を UserData プロパティに追加することによって、認証 Cookie をカスタマイズする方法を次の例に示します。

    Sub AuthenticationService_CreatingCookie(ByVal sender As Object, _
                     ByVal e As System.Web.ApplicationServices.CreatingCookieEventArgs)
        Dim ticket As FormsAuthenticationTicket = New _
           FormsAuthenticationTicket _
            (1, _
             e.Username, _
             DateTime.Now, _
             DateTime.Now.AddMinutes(30), _
             e.IsPersistent, _
             e.CustomCredential, _
             FormsAuthentication.FormsCookiePath)
    
        Dim encryptedTicket As String = FormsAuthentication.Encrypt(ticket)
    
        Dim cookie As HttpCookie = New _
            HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket)
        cookie.Expires = DateTime.Now.AddMinutes(30)
    
        HttpContext.Current.Response.Cookies.Add(cookie)
        e.CookieIsSet = True
    End Sub
    
    void AuthenticationService_CreatingCookie(object sender, 
        System.Web.ApplicationServices.CreatingCookieEventArgs e)
    {
        FormsAuthenticationTicket ticket = new
              FormsAuthenticationTicket
                (1,
                 e.UserName,
                 DateTime.Now,
                 DateTime.Now.AddMinutes(30),
                 e.IsPersistent,
                 e.CustomCredential,
                 FormsAuthentication.FormsCookiePath);
    
        string encryptedTicket =
             FormsAuthentication.Encrypt(ticket);
    
        HttpCookie cookie = new HttpCookie
             (FormsAuthentication.FormsCookieName,
              encryptedTicket);
        cookie.Expires = DateTime.Now.AddMinutes(30);
    
        HttpContext.Current.Response.Cookies.Add(cookie);
        e.CookieIsSet = true;
    }
    
  3. Global.asax ファイルの Application_Start メソッドで、イベント ハンドラを CreatingCookie イベントに関連付けます。

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

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

コードのコンパイル方法

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

セキュリティ

認証資格情報などの機密のユーザー データを渡す場合、必ず HTTPS プロトコルを使用して SSL 経由で認証サービスにアクセスします。SSL のセットアップ方法については、「SSL (Secure Sockets Layer) を構成する (IIS 6.0 操作ガイド)」を参照してください。

参照

概念

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

参照

AuthenticationService

CreatingCookieEventArgs