如何:对 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 服务器上设置身份验证服务才能让前面的示例工作。有关更多信息,请参见如何:启用 WCF 身份验证服务

安全性

始终通过使用安全套接字层 (SSL)、HTTPS 协议来访问身份验证服务。

请参见

概念

Windows Communication Foundation 身份验证服务概述

参考

AuthenticationService

AuthenticatingEventArgs

其他资源

使用成员资格管理用户