共用方式為


HOW TO:自訂使用 WCF 驗證服務時的使用者登入

更新:2007 年 11 月

本主題說明當您使用 Windows Communication Foundation (WCF) 來呼叫 ASP.NET 驗證服務時,如何驗證 (Validate) 自訂的認證以驗證 (Authenticate) 使用者。一般來說,驗證作業只需要使用者名稱和密碼。不過,在某些情況下,可能需要使用額外的認證以驗證使用者的身分識別,例如識別碼。

當您希望從可以傳送與使用 SOAP 1.1 訊息的用戶端應用程式 (例如 Java 應用程式) 登入使用者時,可以使用 WCF 做為驗證服務。

若要驗證自訂認證以進行驗證

  1. 在 Web 應用程式的 Global.asax 檔案中,建立 Authenticating 事件的事件處理常式。

  2. 在這個處理常式中,讀取處理常式 AuthenticatingEventArgs 參數之 CustomCredential 屬性的內容,然後驗證這些值。

    下列範例顯示如何從 CustomCredential 屬性讀取兩個驗證值,然後將其傳遞至名為 StudentAuthentication 的自訂驗證類別。

    Sub AuthenticationService_Authenticating _
       (ByVal sender As Object, _
        ByVal e As System.Web.ApplicationServices.AuthenticatingEventArgs)
        Dim studentid As String = String.Empty
        Dim answer As String = String.Empty
    
        Dim credentials As String() = _
             e.CustomCredential.Split(New Char() {","c})
        If (credentials.Length > 0) Then
            studentid = credentials(0)
            If (credentials.Length > 1) Then
                answer = credentials(1)
            End If
        End If
    
        Try
            e.Authenticated = _
                StudentAuthentication.ValidateStudentCredentials _
                (e.Username, e.Password, studentid, answer)
        Catch ex As ArgumentNullException
            e.Authenticated = False
        End Try
    
    
        e.AuthenticationIsComplete = True
    End Sub
    
    void AuthenticationService_Authenticating(object sender, System.Web.ApplicationServices.AuthenticatingEventArgs e)
    {
        string studentid = String.Empty;
        string answer = String.Empty;
    
        string[] credentials =
            e.CustomCredential.Split(new char[] { ',' });
        if (credentials.Length > 0)
        {
            studentid = credentials[0];
            if (credentials.Length > 1)
            {
                answer = credentials[1];
            }
        }
    
        try
        {
            e.Authenticated =
                StudentAuthentication.ValidateStudentCredentials
                (e.UserName, e.Password, studentid, answer);
        }
        catch (ArgumentNullException ex)
        {
            e.Authenticated = false;
        }
    
        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. 從可使用來自 Web 服務之 SOAP 訊息的應用程式呼叫驗證服務,並在 CustomCredential 屬性中傳遞額外要驗證的值。

編譯程式碼

穩固程式設計

先前的程式碼範例顯示一個自訂驗證類別,如果有任何參數是 null,這個類別會擲回 ArgumentNullException。您的程式碼必須處理驗證期間引發的任何例外狀況 (Exception)。

安全性

永遠使用 Secure Sockets Layer (SSL) 以 HTTPS 通訊協定來存取驗證服務。

請參閱

概念

Windows Communication Foundation 驗證服務概觀

參考

AuthenticationService

AuthenticatingEventArgs