如何:使用客户端应用程序服务来实现用户登录和注销
更新:2007 年 11 月
通过现有的 ASP.NET AJAX 配置文件服务可以使用客户端应用程序服务来验证用户。有关如何设置 ASP.NET AJAX 配置文件服务的信息,请参见将 Forms 身份验证用于 ASP.NET AJAX。
以下过程描述了在将应用程序配置为使用一个客户端身份验证服务提供程序时如何通过身份验证服务验证用户。有关更多信息,请参见如何:配置客户端应用程序服务。
通常通过 static Membership.ValidateUser 方法执行所有验证。此方法通过配置的身份验证提供程序管理与身份验证服务的交互。有关更多信息,请参见客户端应用程序服务概述。
Forms 身份验证过程要求访问正在运行的 ASP.NET AJAX 身份验证服务。有关在客户端应用程序服务功能的端到端测试的指南,请参见演练:使用客户端应用程序服务。
使用成员资格凭据提供程序对用户进行 Forms 身份验证
实现 IClientFormsAuthenticationCredentialsProvider 接口。下面的代码示例演示从 System.Windows.Forms.Form 派生的登录对话框类的 IClientFormsAuthenticationCredentialsProvider.GetCredentials 实现。此对话框具有用于输入用户名和密码的文本框和“记住我”复选框。当客户端身份验证提供程序调用 GetCredentials 方法时,将显示该窗体。当用户在登录对话框中填写信息并单击“确认”时,将在一个新的 ClientFormsAuthenticationCredentials 对象中返回指定值。
Public Function GetCredentials() As _ ClientFormsAuthenticationCredentials Implements _ IClientFormsAuthenticationCredentialsProvider.GetCredentials If Me.ShowDialog() = DialogResult.OK Then Return New ClientFormsAuthenticationCredentials( _ UsernameTextBox.Text, PasswordTextBox.Text, _ rememberMeCheckBox.Checked) Else Return Nothing End If End Function
public ClientFormsAuthenticationCredentials GetCredentials() { if (this.ShowDialog() == DialogResult.OK) { return new ClientFormsAuthenticationCredentials( usernameTextBox.Text, passwordTextBox.Text, rememberMeCheckBox.Checked); } else { return null; } }
调用 static Membership.ValidateUser 方法,并传入空字符串作为参数值。当指定空字符串时,此方法将在内部调用为应用程序配置的凭据提供程序的 GetCredentials 方法。下面的代码示例调用此方法,以限制对整个 Windows 窗体应用程序的访问。可以将此代码添加到 Form.Load 处理程序。
If Not System.Web.Security.Membership.ValidateUser( _ String.Empty, String.Empty) Then MessageBox.Show("Unable to authenticate.", "Not logged in", _ MessageBoxButtons.OK, MessageBoxIcon.Error) Application.Exit() End If
if (!System.Web.Security.Membership.ValidateUser( String.Empty, String.Empty)) { MessageBox.Show("Unable to authenticate.", "Not logged in", MessageBoxButtons.OK, MessageBoxIcon.Error); Application.Exit(); }
在不使用成员资格凭据提供程序的情况下对用户进行 Forms 身份验证
调用 static Membership.ValidateUser 方法,并传入从用户获得的用户名和密码值。
If Not System.Web.Security.Membership.ValidateUser( _ usernameTextBox.Text, passwordTextBox.Text) Then MessageBox.Show("Unable to authenticate.", "Not logged in", _ MessageBoxButtons.OK, MessageBoxIcon.Error) Application.Exit() End If
if (!System.Web.Security.Membership.ValidateUser( usernameTextBox.Text, passwordTextBox.Text)) { MessageBox.Show("Unable to authenticate.", "Not logged in", MessageBoxButtons.OK, MessageBoxIcon.Error); Application.Exit(); }
使用 Windows 身份验证验证用户
调用 static Membership.ValidateUser 方法,并传递空字符串作为参数。此方法调用将始终返回 true,并将 Cookie 添加到包含 Windows 标识的用户的 Cookie 缓存中。
System.Web.Security.Membership.ValidateUser( _ String.Empty, String.Empty)
System.Web.Security.Membership.ValidateUser( String.Empty, String.Empty);
可靠编程
本主题中的示例代码演示在 Windows 客户端应用程序中进行身份验证的最简单的用法。但是,当对客户端应用程序服务和 Forms 身份验证调用 static Membership.ValidateUser 方法时,代码可能引发 WebException。这表示身份验证服务不可用。有关如何处理此异常的示例,请参见演练:使用客户端应用程序服务。