共用方式為


HOW TO:針對 WCF 驗證服務使用非預設的成員資格提供者

更新:2007 年 11 月

本主題說明當您使用 Windows Communication Foundation (WCF) 來呼叫 ASP.NET 驗證服務時,如何以程式設計方式選取成員資格提供者。根據您在執行階段取得的資訊而定,當您必須使用不同的成員資格提供者來驗證使用者時,您可以使用非預設的成員資格提供者。若要透過非預設的成員資格提供者來進行驗證,您必須為 Authenticating 事件建立事件處理常式。

您必須使用 WCF 做為驗證服務,將使用者從可以傳送與使用 SOAP 1.1 訊息的用戶端應用程式 (例如,Java 應用程式) 登入。用戶端應用程式可以使用與 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 伺服器上設定驗證服務,先前的範例才能運作。如需詳細資訊,請參閱 HOW TO:啟用 WCF 驗證服務

安全性

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

請參閱

概念

Windows Communication Foundation 驗證服務概觀

參考

AuthenticationService

AuthenticatingEventArgs

其他資源

使用成員資格管理使用者