如何:通过 WCF 身份验证服务自定义身份验证 Cookie
更新:2007 年 11 月
本主题演示在将 ASP.NET 身份验证服务用作 Windows Communication Foundation (WCF) 服务时,如何自定义其身份验证 Cookie(票证)。当您需要在身份验证期间将用户特定的数据存储在 Cookie 中时,就可以自定义身份验证 Cookie。
说明: |
---|
通常,与将数据存储在 Cookie 中相比,将用户特定的数据存储在 ASP.NET 配置文件属性中是更好的选择。配置文件属性数据不会绑定到某台计算机或受 Cookie 生存期的限制。此外,可以在配置文件属性中更安全地存储用户数据。如果您有少量非敏感数据,并且不希望使用 ASP.NET 配置文件功能,则自定义 Cookie 的内容将非常有用。 |
身份验证服务将在已验证用户凭据之后且在已设置身份验证 Cookie 之前引发 CreatingCookie 事件。通过为 CreatingCookie 创建事件处理程序并自行管理身份验证 Cookie,可以自定义 Cookie。通过传递给事件处理程序的 CreatingCookieEventArgs 对象,可以访问用户名、密码和自定义凭据。
若要使用户从可以发送和使用 SOAP 1.1 消息的客户端应用程序(例如 Java 应用程序)登录,请使用身份验证服务的 WCF 实现。
自定义身份验证 Cookie
在 Web 应用程序的 Global.asax 文件中,为 CreatingCookie 事件创建事件处理程序。
在该处理程序中,向 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; }
在 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); }
从可以使用来自 Web 服务的 SOAP 消息的应用程序调用身份验证服务。
编译代码
必须在 Web 服务器上设置身份验证服务才能让前面的示例工作。有关更多信息,请参见如何:启用 WCF 身份验证服务。
安全性
如果要传递敏感的用户数据(如身份验证凭据),请始终通过安全套接字层(SSL,通过使用 HTTPS 协议)来访问身份验证服务。有关如何设置 SSL 的信息,请参见 Configuring Secure Sockets Layer (IIS 6.0 Operations Guide)(配置安全套接字层(IIS 6.0 操作指南))。
请参见
概念
Windows Communication Foundation 身份验证服务概述