最简单的 Forms 登录 (适合初学者和快速原型)
这个方案不使用 ASP.NET Identity,而是直接使用 ASP.NET 内置的 Forms Authentication 功能,它更轻量,但功能较少(如没有内置的用户管理、角色管理等)。

核心思路
- 创建一个登录页面 (
Login.aspx),包含用户名和密码输入框。 - 在登录按钮的点击事件中,验证用户名和密码是否正确(通常是从数据库或配置中读取)。
- 如果验证成功,调用
FormsAuthentication.RedirectFromLoginPage方法创建身份验证票据,并重定向到用户最初想访问的页面或首页。 - 在需要保护的页面上,通过
web.config文件配置<authentication>和<authorization>节点来限制访问。
代码示例
创建项目 使用 Visual Studio 创建一个 "ASP.NET Web 应用程序",选择 "Web Forms" 模板。
配置 web.config
在 web.config 中添加以下配置:
<configuration>
<system.web>
<!-- 启用 Forms 身份验证 -->
<authentication mode="Forms">
<forms loginUrl="~/Login.aspx" timeout="30" />
</authentication>
<!-- 授权规则:拒绝所有匿名用户访问 -->
<authorization>
<deny users="?" />
</authorization>
... 其他配置 ...
</system.web>
</configuration>
创建登录页面 Login.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Login.aspx.cs" Inherits="SimpleLogin.Login" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">登录</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h3>用户登录</h3>
<asp:Label ID="lblMessage" runat="server" ForeColor="Red"></asp:Label>
<br />
<asp:Label runat="server" Text="用户名:"></asp:Label>
<asp:TextBox ID="txtUsername" runat="server"></asp:TextBox>
<br />
<asp:Label runat="server" Text="密码:"></asp:Label>
<asp:TextBox ID="txtPassword" runat="server" TextMode="Password"></asp:TextBox>
<br />
<asp:Button ID="btnLogin" runat="server" Text="登录" OnClick="btnLogin_Click" />
</div>
</form>
</body>
</html>
编写登录逻辑 Login.aspx.cs

using System;
using System.Web.Security; // 引入命名空间
namespace SimpleLogin
{
public partial class Login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnLogin_Click(object sender, EventArgs e)
{
string username = txtUsername.Text.Trim();
string password = txtPassword.Text.Trim();
// 1. 验证用户名和密码 (这里使用硬编码,实际项目中应查询数据库)
// 注意:永远不要在代码中明文存储密码!这里仅为演示。
if (username == "admin" && password == "password123")
{
// 2. 验证成功,创建身份验证票据并重定向
// 第二个参数 true 表示创建持久性 Cookie (下次访问仍保持登录状态)
FormsAuthentication.RedirectFromLoginPage(username, false);
}
else
{
// 3. 验证失败,显示错误信息
lblMessage.Text = "用户名或密码错误!";
}
}
}
}
访问受保护的页面
创建一个 Default.aspx 页面,由于 web.config 中配置了 <deny users="?" />,任何未登录的用户尝试访问 Default.aspx 都会被自动重定向到 Login.aspx,登录成功后,会自动跳回 Default.aspx。
使用 ASP.NET Identity (强烈推荐)
这是目前 ASP.NET 中最现代、最强大、最灵活的会员系统方案,它基于 Entity Framework,支持用户、角色、OAuth 外部登录、密码哈希、双因素认证等高级功能。
核心思路
- 通过 NuGet 包管理器安装
Microsoft.AspNet.Identity.EntityFramework等相关包。 - 创建
ApplicationDbContext类,继承自IdentityDbContext,用于与数据库交互。 - 创建
ApplicationUser类,继承自IdentityUser,可以添加自定义的用户属性(如电话号码、生日等)。 - 创建
AccountController,处理注册、登录、登出等所有与账户相关的操作。 - 在
Startup.cs(或App_Start/IdentityConfig.cs) 中配置 Identity 服务。 - 使用 ASP.NET MVC 或 Razor Pages 的内置帮助方法(如
@Html.ActionLink("Log off", "LogOff", "Account"))来生成登录/注册链接和表单。
代码示例 (ASP.NET MVC)
创建项目 使用 Visual Studio 创建一个 "ASP.NET Web 应用程序",选择 MVC 模板。勾选 "个人用户账户" 选项,Visual Studio 会自动为你生成所有必要的代码和配置!
生成的核心文件结构 项目创建后,你会看到以下关键文件:

Models/IdentityModels.cs: 包含ApplicationUser和ApplicationDbContext。Controllers/AccountController.cs: 包含注册、登录、登出、忘记密码等所有 Action。Views/Account/: 包含所有账户相关的视图页面,如Login.cshtml,Register.cshtml。App_Start/IdentityConfig.cs: 包含ApplicationUserManager和ApplicationSignInManager的配置。Startup.cs: 包含 Identity 服务的注册和配置。
如何使用(无需编写代码)
- 运行项目:直接按 F5 运行项目,会自动跳转到登录页面。
- 注册新用户:点击“注册”链接,填写信息即可创建一个新用户,用户信息会被自动保存到 SQL Server LocalDB 中。
- 登录:使用刚注册的用户名和密码登录。
如何获取代码 由于这个功能是内置的,你不需要“下载”额外的代码,最好的学习方式就是自己创建一个 MVC 项目,然后仔细研究它自动生成的代码,这是学习 ASP.NET Identity 最直接、最有效的方法。
如果你想在现有项目中手动添加 Identity,可以参考官方文档: https://docs.microsoft.com/zh-cn/aspnet/core/security/authentication/identity
ASP.NET Core 中的登录实现 (现代、跨平台)
如果你使用的是最新的 .NET 技术,那么应该使用 ASP.NET Core 的 Identity 系统,它与 ASP.NET Identity 3.x/4.x 非常相似,但与 ASP.NET Core 的依赖注入 (DI) 和中间件系统结合得更紧密。
核心思路
与 ASP.NET Identity 类似,但配置和使用方式略有不同:
- 创建一个 ASP.NET Core Web 应用程序 (MVC 或 Razor Pages),选择 "Web 应用程序" 模板并勾选" Individual User Accounts"。
- 同样,所有代码会自动生成。
- 配置主要在
Startup.cs的ConfigureServices和Configure方法中完成。 - 登录/登出的 API 和视图都包含在生成的
AccountController和Areas/Identity/Pages/Account文件夹中。
代码示例 (ASP.NET Core MVC)
创建项目
使用 Visual Studio 或 dotnet new 命令创建一个 ASP.NET Core MVC 项目,并选择“启用 HTTPS”和“个人用户账户”。
生成的核心文件
Models/ApplicationDbContext.cs: 数据库上下文。Models/IdentityUser.cs(以及ApplicationUser.cs如果自定义了): 用户模型。Controllers/AccountController.cs: 账户控制器。Areas/Identity/: 包含所有 Identity 相关的页面。Startup.cs: 服务和中间件配置。
如何使用 与 ASP.NET Identity 完全一样,运行项目即可体验完整的注册和登录功能。
总结与建议
| 特性 | 方案一 (Forms Auth) | 方案二 (ASP.NET Identity) | 方案三 (ASP.NET Core Identity) |
|---|---|---|---|
| 技术栈 | ASP.NET Web Forms | ASP.NET MVC / Web Forms | ASP.NET Core MVC / Razor Pages |
| 推荐度 | ⭐⭐ (仅用于非常简单的场景或旧项目维护) | ⭐⭐⭐⭐⭐ (经典 .NET 项目的首选) | ⭐⭐⭐⭐⭐ (新项目的绝对首选) |
| 优点 | 简单、轻量、配置少 | 功能强大、灵活、社区支持好、安全、易于扩展 | 现代化、跨平台、性能更好、与 .NET Core 生态无缝集成 |
| 缺点 | 功能有限、已过时、扩展性差 | 配置稍复杂、依赖 EF | 相对较新,但文档和社区非常完善 |
| 适合场景 | 学习原理、维护旧系统、内部工具 | 基于 .NET Framework 的新项目 | 基于 .NET 5/6/7/8 的新项目 |
最终建议:
- 如果你是初学者,想了解登录的基本原理,可以从方案一开始,理解
FormsAuthentication的工作方式。 - 如果你要开发一个新的、基于 .NET Framework 的项目,请毫不犹豫地选择方案二 (ASP.NET Identity),直接创建 MVC 项目并勾选 "个人用户账户" 是最快的入门方式。
- 如果你要开发一个新的、基于 .NET Core / .NET 5+ 的项目,请使用方案三 (ASP.NET Core Identity),这是未来的方向,性能和功能都更优。
对于绝大多数新项目,直接使用 Visual Studio 模板生成的代码是最好的“下载”方式,因为它包含了经过深思熟虑的最佳实践和完整的功能集。
