共用方式為


HOW TO:自訂來自 WCF 驗證服務的驗證 Cookie

更新:2007 年 11 月

本主題說明在 ASP.NET 驗證服務做為 Windows Communication Foundation (WCF) 服務使用時,如何自訂其驗證 Cookie (票證)。當您想在驗證期間將使用者專屬資料儲存在 Cookie 時,可以自訂驗證 Cookie。

注意事項:

一般而言,相較於將資料儲存在 Cookie 中,將使用者專屬資料儲存在 ASP.NET 設定檔屬性中是更好的選擇。設定檔屬性資料不會與單一部電腦繫結,或受限於 Cookie 的生命週期。此外,將使用者資料儲存在設定檔屬性中也較為安全。如果您擁有少量非敏感性資料且不想使用 ASP.NET 設定檔功能,那麼自訂 Cookie 內容就非常有用。

在驗證使用者認證之後,設定驗證 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 伺服器上設定驗證服務,先前的範例才能運作。如需詳細資訊,請參閱 HOW TO:啟用 WCF 驗證服務

安全性

傳遞敏感性使用者資料 (如驗證認證) 時,務必透過 Secure Sockets Layer (SSL,藉由使用 HTTPS 通訊協定) 來存取驗證服務。如需設定 SSL 的詳細資訊,請參閱設定 Secure Sockets Layer (IIS 6.0 操作手冊) (英文)。

請參閱

概念

Windows Communication Foundation 驗證服務概觀

參考

AuthenticationService

CreatingCookieEventArgs