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
相关产品推荐
相关产品推荐

