首页 优化推广 如何使用 C# .NET 在 ASP.NET 应用程序中实现基于窗体的身份验证

如何使用 C# .NET 在 ASP.NET 应用程序中实现基于窗体的身份验证

来源: | 时间:2011/4/9 17:23:40 |

本文介绍如何通过使用数据库存储用户来实现基于窗体的身份验

要求

下表列出了推荐使用的硬件、软件、网络架构以及所需的 Service Pack:

  • Microsoft Visual Studio .NET
  • Microsoft Internet 信息服务 (IIS) 5.0 或更高版本
  • Microsoft SQL Server

使用 C# .NET 创建 ASP.NET 应用程序

  1. 打开 Visual Studio .NET。
  2. 新建 ASP.NET Web 应用程序,并指定应用程序的名称和位置。

在 Web.config 文件中配置安全设置

本节介绍如何添加和修改 <authentication><authorization> 配置部分,以便将 ASP.NET 应用程序配置为使用基于窗体的身份验证。

  1. 在解决方案资源管理器中,打开 Web.config 文件。
  2. 将身份验证模式更改为 Forms(窗体)。
  3. 插入 <Forms> 标记,并填入相应的属性。(有关这些属性的更多信息,请参考 MSDN 文档或快速入门文档,这些文档在 参考 一节中列出。)复制以下代码,然后在“编辑”菜单中单击“粘贴为 HTML”,将该代码粘贴到文件的 <authentication> 部分:
    <authentication mode="Forms">
       <forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx" 
       protection="All" path="/" timeout="30" />
    </authentication> 
    					
  4. <authorization> 部分中拒绝匿名用户的访问(如下所示):
    <authorization>
       <deny users ="?" />
       <allow users = "*" />
    </authorization>
    					

创建示例数据库表以存储用户详细信息

本节介绍如何创建可存储用户名、密码和用户角色的示例数据库。如果要将用户角色存储在数据库中并实现基于角色的安全性,则需要角色列。

  1. 在“开始”菜单上,单击“运行”,然后键入 notepad 以打开记事本。
  2. 突出显示以下 SQL 脚本代码,右键单击该代码,然后单击“复制”。在记事本中,单击“编辑”菜单上的“粘贴”以粘贴以下代码:
    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
    					
  3. 将该文件另存为 Users.sql。
  4. 在 Microsoft SQL Server 计算机上,在查询分析器中打开 Users.sql。在数据库列表中,单击“pubs”,然后运行该脚本。这将创建一个示例用户表,并使用此示例应用程序填充要使用的 Pubs 数据库中的该表。

创建 Logon.aspx 页

  1. 将一个新的 Web 窗体添加到名为 Logon.aspx 的项目中。
  2. 在编辑器中打开 Logon.aspx 页,并切换到 HTML 视图。
  3. 复制以下代码,然后使用“编辑”菜单上的“粘贴为 HTML”选项将代码插入到 <form> 标记之间:
    <h3>
       <font face="Verdana">Logon Page</font>
    </h3>
    <table>
       <tr>
          <td>Email:</td>
          <td><input id="txtUserName" type="text" runat="server"></td>
          <td><ASP:RequiredFieldValidator ControlToValidate="txtUserName"
               Display="Static" ErrorMessage="*" runat="server" 
               ID="vUserName" /></td>
       </tr>
       <tr>
          <td>Password:</td>
          <td><input id="txtUserPass" type="password" runat="server"></td>
          <td><ASP:RequiredFieldValidator ControlToValidate="txtUserPass"
              Display="Static" ErrorMessage="*" runat="server" 
              ID="vUserPass" />
          </td>
       </tr>
       <tr>
          <td>Persistent Cookie:</td>
          <td><ASP:CheckBox id="chkPersistCookie" runat="server" autopostback="false" /></td>
          <td></td>
       </tr>
    </table>
    <input type="submit" Value="Logon" runat="server" ID="cmdLogin"><p></p>
    <asp:Label id="lblMsg" ForeColor="red" Font-Name="Verdana" Font-Size="10" runat="server" />
    						
    此 Web 窗体用于向用户提供登录窗体,以便他们提供用于登录到应用程序的用户名和密码。
  4. 切换到“设计”视图并保存该页。

对事件处理程序进行编码以使它验证用户凭据

本节给出位于代码隐藏页 (Logon.aspx.cs) 中的代码。

  1. 双击“Logon”打开 Logon.aspx.cs 文件。
  2. 导入代码隐藏文件中必需的命名空间:
    using System.Data.SqlClient;
    using System.Web.Security;
    					
  3. 创建 ValidateUser 函数,以便通过查找数据库来验证用户凭据。(确保将连接字符串更改为指向数据库。)
    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.&qu
                        

服务热线

153 8323 9821

功能和特性

价格和优惠

网站和维护

推广和优化

微信服务号