You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET CORE 5 未选认证的现有项目如何实现登录注册系统

结论

完全可以为现有项目集成登录/注册系统,不需要重建项目。ASP.NET Core 5的认证授权体系是完全模块化的,创建项目时选择认证模板只是帮你预生成了相关配置和基础代码,手动集成的最终效果和模板生成的项目没有任何区别,哪怕是已经迭代到较大规模的项目,也可以平滑接入,不需要全量重构现有业务代码。

集成步骤

1. 安装依赖包

根据你选择的认证方案安装对应的NuGet包:

  • 轻量Cookie认证(不需要完整的用户权限管理、用户表自己维护的场景):安装Microsoft.AspNetCore.Authentication.Cookies
  • 完整身份体系(需要注册、登录、角色管理、密码重置、双因素认证等全能力):安装Microsoft.AspNetCore.Identity.EntityFrameworkCore,以及你项目使用的数据库对应的EF Core提供程序包(比如SQL Server对应Microsoft.EntityFrameworkCore.SqlServer)

2. 注册认证服务

打开项目的Startup.cs文件,在ConfigureServices方法中添加认证相关服务配置。
如果选择轻量Cookie认证,添加如下代码:

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        // 配置未登录时自动跳转的登录页路径
        options.LoginPath = "/Account/Login";
        // 配置权限不足时的跳转路径
        options.AccessDeniedPath = "/Account/AccessDenied";
        // 配置登录态有效期
        options.ExpireTimeSpan = TimeSpan.FromDays(7);
    });

如果选择使用ASP.NET Core Identity完整身份体系:

  • 先定义自己的用户实体类,继承IdentityUser,可按需扩展自定义用户字段
  • 定义自己的数据库上下文类,继承IdentityDbContext<你的用户实体类>
  • 在ConfigureServices中添加如下服务注册代码:
services.AddIdentity<AppUser, IdentityRole>(options =>
    {
        // 可按需配置密码规则、登录锁定规则等
        options.Password.RequireNonAlphanumeric = false;
        options.Password.RequiredLength = 6;
    })
    .AddEntityFrameworkStores<AppDbContext>()
    .AddDefaultTokenProviders();

3. 配置中间件管道

在Startup.cs的Configure方法中,按正确顺序添加认证、授权中间件,顺序错误会导致认证不生效:中间件必须放在app.UseRouting()之后,app.UseEndpoints()之前,代码如下:

app.UseRouting();

// 顺序不能调换:先完成身份认证,再执行权限校验
app.UseAuthentication();
app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
    endpoints.MapDefaultControllerRoute();
    // 你的其他端点配置
});

4. 实现业务逻辑

  • 新增Account控制器,实现注册、登录、登出、忘记密码等对应接口和视图,登录逻辑中调用认证系统的API签发登录凭证即可,不需要自己实现Cookie加密、校验逻辑
  • 对需要登录才能访问的控制器、Action接口,添加[Authorize]特性标记,未登录用户访问时会自动跳转到你之前配置的登录页
  • 公开不需要权限的接口、页面不需要做任何修改,完全兼容现有业务逻辑
大项目集成注意事项
  • 不需要一次性重构所有现有代码,可以逐步给需要权限控制的模块加[Authorize]特性,平滑完成迁移
  • 现有业务中如果有自定义的登录判断逻辑,可以逐步替换为认证系统内置的身份对象:用User.Identity.IsAuthenticated判断用户是否登录,用User.FindFirstValue()获取用户的Id、用户名等身份信息
  • 使用Identity的场景下,执行EF Core迁移即可自动生成用户、角色、凭证等Identity所需的数据库表,不会影响你现有业务表的结构和数据

内容的提问来源于stack exchange,提问作者Matěj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 01:51:25