Welcome 微信登录
编程资源 图片资源库

首页 / 软件开发 / WCF / WCF身份验证服务

WCF身份验证服务2014-06-26Windows Communication Foundation (WCF) 身份验证服务使你能够使用ASP.NET成员资格,从可以发送和使用SOAP消息的任何应用程序中对用户进行身份验证。这可以包括不使用.NET Framework的应用程序。因此,这些不同的应用程序的用户不需要对每个应用程序使用单独的凭据。用户在使用任意客户端应用程序时,均可通过提供相同的凭据登录到应用程序中。本节就使用WCF身份验证服务的几个关键点做实践性分析。
创建WCF身份验证服务

System.Web.ApplicationServices.AuthenticationService是.NET提供的默认身份验证服务类。AuthenticationService类包含只应通过WCF服务访问的四个方法:IsLoggedIn、Login、Logout和 ValidateUser方法。若要调用这些方法,请启用Web服务器上的身份验证服务,然后将WCF兼容的客户端应用程序连接到Web服务。

若要使用户登录,请将用户凭据传递给Login方法。如果凭据有效,AuthenticationService类创建一个身份验证Cookie;如果身份验证Cookie尚未过期,并且知道该用户的凭据已经过身份验证,则不必再次验证凭据。

注意 不能通过AuthenticationService类使用无Cookie身份验证。

AuthenticationService可引发两个事件:Authenticating和CreatingCookie。当验证用户凭据时发生Authenticating事件。为Authenticating事件创建一个事件处理程序以自定义如何验证用户凭据。在验证完用户凭据后设置身份验证Cookie时发生CreatingCookie事件。为CreatingCookie事件创建一个事件处理程序以自定义身份验证Cookie。

ValidateUser方法检查用于身份验证的用户凭据,但该方法不返回身份验证票证。当用户先前已登录且必须检查凭据在新的应用程序会话开始时是否仍然有效时,请使用ValidateUser方法。

现在新建一个.svc文件,如果使用默认的System.Web.ApplicationServices.AuthenticationService类提供成员资格验证服务,可以删除默认生成的接口文件和类文件,然后修改.svc文件,修改后的内容如下所示:

<%@ ServiceHost Language="C#"Service="System.Web.ApplicationServices.ProfileService"%>
如果要实现自定义的成员资格服务,只需要为Authenticating事件创建一个事件处理程序即可。

首先,创建如代码清单10-28所示的Authenticating事件处理程序。

代码清单10-28  Authenticating事件处理程序

void AuthenticationService_Authenticating(object sender, System.Web.ApplicationServices.AuthenticatingEventArgs e){if (e.UserName.IndexOf("@xuanhun.com") >= 0){e.Authenticated = Membership.Providers["xuanhunSqlProvider"].ValidateUser(e.UserName, e.Password);}elseif (e.UserName.IndexOf("@xuanbing.com") >= 0){e.Authenticated = Membership.Providers["xuanbingSqlProvider"].ValidateUser(e.UserName, e.Password);}else{e.Authenticated = Membership.Provider.ValidateUser(e.UserName, e.Password);}e.AuthenticationIsComplete = true;}
以上代码所示的Authenticating事件处理程序中,使用三个成员资格提供程序来验证用户,分别是自定义的xuanbingSqlProvider、xuanhunSqlProvider和配置文件中配置的默认的成员资格提供程序。验证之后设置当前用户的验证状态。

在编写完Authenticating事件处理程序后,需要在Global.asax文件的Application_Start方法中绑定Authenticating事件的处理程序。代码如下所示:

void Application_Start(object sender, EventArgs e){System.Web.ApplicationServices.AuthenticationService.Authenticating +=new EventHandler<System.Web.ApplicationServices.AuthenticatingEventArgs>(AuthenticationService_Authenticating);}