如何:使用客户端应用程序服务来实现用户登录

通过现有的 Microsoft Ajax 配置文件服务可以使用客户端应用程序服务来验证用户。 有关如何设置 Microsoft Ajax 配置文件服务的信息,请参见通过 Microsoft Ajax 使用 Forms 身份验证

以下过程描述了在将应用程序配置为使用一个客户端身份验证服务提供程序时如何通过身份验证服务验证用户。 有关更多信息,请参见如何:配置客户端应用程序服务

通常通过 static Membership.ValidateUser 方法执行所有验证。 此方法通过配置的身份验证提供程序管理与身份验证服务的交互。 有关更多信息,请参见客户端应用程序服务概述

Forms 身份验证过程要求访问正在运行的 Microsoft Ajax 身份验证服务。 有关在客户端应用程序服务功能的端到端测试的指南,请参见演练:使用客户端应用程序服务

使用成员资格凭据提供程序对用户进行 Forms 身份验证

  1. 实现 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;
        }
    }
    
  2. 调用 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。 这表示身份验证服务不可用。 有关如何处理此异常的示例,请参见演练:使用客户端应用程序服务

请参见

任务

如何:配置客户端应用程序服务

演练:使用客户端应用程序服务

概念

客户端应用程序服务概述

通过 Microsoft Ajax 使用 Forms 身份验证

其他资源

客户端应用程序服务