加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱资讯网 (https://www.52junxun.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > Asp教程 > 正文

使用 ASP.NET.NET 在 C# 应用程序中实现基于表单的身份验证

发布时间:2023-02-14 13:16:59 所属栏目:Asp教程 来源:
导读:  使用 ASP.NET.NET 在 C# 应用程序中实现基于表单的身份验证本文内容

  本文演示如何使用数据库存储用户来实现基于表单的身份验证。 它引用了以下 Microsoft .NET Framework类库命名空间:

  原始产品
  使用 ASP.NET.NET 在 C# 应用程序中实现基于表单的身份验证本文内容
 
  本文演示如何使用数据库存储用户来实现基于表单的身份验证。 它引用了以下 Microsoft .NET Framework类库命名空间:
 
  原始产品版本: ASP.NET
 
  原始 KB 编号: 301240
 
  要求
 
  以下列表概述了所需的推荐硬件、软件、网络基础结构和 Service Pack:
 
  使用 ASP.NET .NET 创建 C# 应用程序打开 Visual Studio .NET。新建一 ASP.NET Web 应用程序,并指定名称和位置。配置文件Web.config安全设置
 
  本节演示如何添加和修改 和 配置部分,以将 ASP.NET 应用程序配置为使用基于表单的身份验证。
 
  在“解决方案资源管理器”中打开 Web.config 文件。
 
  将身份验证模式更改为 Forms。
 
  插入 标记,并填充相应的属性。 复制以下代码,然后在"编辑"菜单上选择"粘贴为 HTML" 以将代码 粘贴到文件的 部分:
 
  拒绝对部分中的匿名 用户的访问,如下所示:
 
  创建示例数据库表以存储用户详细信息
 
  本节演示如何创建示例数据库来存储用户的用户名、密码和角色。 如果要在数据库中存储用户角色并实施基于角色的安全性,则需要角色列。
 
  在"开始" 菜单上,选择"运行",然后键入记事本以打开记事本。
 
  突出显示以下SQL脚本代码,右键单击代码,然后选择"复制 "。 In 记事本, select Paste on the Edit menu to paste the following code:
 
  if exists (select * from sysobjects where id =
  object_id(N'[dbo].[Users]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
      drop table [dbo].[Users]
  GO
  CREATE TABLE [dbo].[Users] ([uname] [varchar] (15) NOT NULL,
      [Pwd] [varchar] (25) NOT NULL,
      [userRole] [varchar] (25) NOT NULL,
  ) ON [PRIMARY]
  GO
  ALTER TABLE [dbo].[Users] WITH NOCHECK ADD
      CONSTRAINT [PK_Users] PRIMARY KEY NONCLUSTERED
      ([uname]
      ) ON [PRIMARY]
  GO
  INSERT INTO Users values('user1','user1','Manager')
  INSERT INTO Users values('user2','user2','Admin')
  INSERT INTO Users values('user3','user3','User')
  GO
  将文件另存为 Users.sql。
 
  在"SQL Server"计算机上,在 "查询分析器"中打开 Users.sql。 从数据库列表中,选择 pubs,然后运行脚本。 此操作将创建一个示例用户表,并在 Pubs 数据库中填充该表以用于此示例应用程序。
 
  创建 Logon.aspx 页
 
  将新的 Web 表单添加到名为 Logon.aspx 的项目。
 
  在编辑器中打开 Logon.aspx 页,然后切换到 HTML 视图。
 
  复制以下代码,并使用"编辑"菜单上的"粘贴为 HTML" 选项在标记之间插入 代码:

      Logon Page
 
  Email:
  Password:

  Persistent Cookie:

  此 Web 表单用于向用户显示登录表单,以便他们可以提供其用户名和密码以登录到应用程序。
 
  切换到"设计"视图,然后保存页面。
 
  对事件处理程序进行编码,以便验证用户凭据
 
  本节介绍 Logon.aspx.cs (代码隐藏页) 。
 
  双击" 登录" 打开 Logon.aspx.cs 文件。
 
  在代码隐藏文件中导入所需的命名空间:
 
  using System.Data.SqlClient;
  using System.Web.Security;
  创建 ValidateUser 一个函数,通过查找数据库来验证用户凭据。 请确保将字符串 Connection 更改为指向数据库。
 
  private bool ValidateUser( string userName, string passWord )
  {
      SqlConnection conn;
      SqlCommand cmd;
      string lookupPassword = null;
      // Check for invalid userName.
      // userName must not be null and must be between 1 and 15 characters.
      if ( ( null == userName ) || ( 0 == userName.Length ) || ( userName.Length > 15 ))
      {
          System.Diagnostics.Trace.WriteLine( "[ValidateUser] Input validation of userName failed." );
          return false;
      }
      // Check for invalid passWord.
      // passWord must not be null and must be between 1 and 25 characters.
      if ( ( null == passWord ) || ( 0 == passWord.Length ) || ( passWord.Length > 25 ))
      {
          System.Diagnostics.Trace.WriteLine( "[ValidateUser] Input validation of passWord failed." );
          return false;
      }
      try
      {
          // Consult with your SQL Server administrator for an appropriate connection
          // string to use to connect to your local SQL Server.
          conn = new SqlConnection( "server=localhost;Integrated Security=SSPI;database=pubs" );
          conn.Open();
          // Create SqlCommand to select pwd field from users table given supplied userName.
          cmd = new SqlCommand( "Select pwd from users where uname=@userName", conn );
          cmd.Parameters.Add( "@userName", SqlDbType.VarChar, 25 );
          cmd.Parameters["@userName"].Value = userName;
          // Execute command and fetch pwd field into lookupPassword string.
          lookupPassword = (string) cmd.ExecuteScalar();
          // Cleanup command and connection objects.
          cmd.Dispose();
          conn.Dispose();
      }
      catch ( Exception ex )
      {
          // Add error handling here for debugging.
          // This error message should not be sent back to the caller.
          System.Diagnostics.Trace.WriteLine( "[ValidateUser] Exception " + ex.Message );
      }
      // If no password found, return false.
      if ( null == lookupPassword )
      {
          // You could write failed login attempts here to event log for additional security.
          return false;
      }
      // Compare lookupPassword and input passWord, using a case-sensitive comparison.
      return ( 0 == string.Compare( lookupPassword, passWord, false ));
  }
  可以使用两种方法之一生成表单身份验证 Cookie,并重定向用户到事件的适当 cmdLogin_ServerClick 页面。 为这两种方案提供了示例代码。 根据你的要求使用任意一个。
 
  确保将以下代码添加到 Web 表单设计器生成的代码中的 InitializeComponent 方法:
 
  this.cmdLogin.ServerClick += new System.EventHandler(this.cmdLogin_ServerClick);
  创建 Default.aspx 页
 
  此部分将创建一个测试页,用户进行身份验证后将被重定向到该页面。 如果用户在未先登录应用程序的情况下浏览到此页面,则他们将被重定向到登录页。
 
  将现有 WebForm1.aspx 页 重命名为 Default.aspx,并将其在编辑器中打开。
 
  切换到 HTML 视图,在标记之间复制以下 代码:
 
  此按钮用于从表单身份验证会话注销。
 
  切换到"设计"视图,然后保存页面。
 
  在代码隐藏文件中导入所需的命名空间:
 
  using System.Web.Security;
  双击 SignOut 打开 Default.aspx.cs (代码隐藏) ,在事件处理程序中复制 cmdSignOut_ServerClick 以下代码:
 
  private void cmdSignOut_ServerClick(object sender, System.EventArgs e)
  {
      FormsAuthentication.SignOut();
      Response.Redirect("logon.aspx", true);
  }
  确保将以下代码添加到 Web 表单设计器生成的代码中的 InitializeComponent 方法:
 
  this.cmdSignOut.ServerClick += new System.EventHandler(this.cmdSignOut_ServerClick);
  保存并编译项目。 现在ASP表单,您可以使用该应用程序。
 

(编辑:我爱资讯网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章