ASP.NET Core Identity MongoDBCore使用、支持方法及两款身份包差异咨询
ASP.NET Core Identity 结合 MongoDB 实践指南
一、两个MongoDB Identity包的差异
aspnetcore.identity.mongodb:早期社区实现,维护活跃度低,适配的ASP.NET Core版本偏旧,对.NET 6+的新特性(如最小API)支持有限,不推荐用于新项目。aspnetcore.identity.mongodbcore:当前主流的社区维护包,专门针对ASP.NET Core Identity做了优化,适配最新的.NET版本(6/7/8),完整支持Identity原生方法,文档更完善,问题修复及时,是新项目的首选。
二、AspNetCore.Identity.MongoDbCore 使用步骤
1. 安装包
通过NuGet包管理器或.NET CLI安装:
# NuGet包管理器命令 Install-Package AspNetCore.Identity.MongoDbCore # .NET CLI命令 dotnet add package AspNetCore.Identity.MongoDbCore
2. 定义自定义用户/角色实体
继承MongoDB Identity提供的基类,可添加自定义字段:
// 自定义用户实体 public class AppUser : MongoIdentityUser<string> { public string NickName { get; set; } // 扩展字段:昵称 } // 自定义角色实体 public class AppRole : MongoIdentityRole<string> { public string Description { get; set; } // 扩展字段:角色描述 }
3. 配置服务
在Program.cs中配置MongoDB连接和Identity服务:
var builder = WebApplication.CreateBuilder(args); // 读取MongoDB配置(可在appsettings.json中定义) var mongoSettings = builder.Configuration.GetSection("MongoDbSettings").Get<MongoDbSettings>(); // 注册Identity服务,使用MongoDB存储 builder.Services.AddIdentity<AppUser, AppRole>() .AddMongoDbStores<AppUser, AppRole, string>(options => { options.ConnectionString = mongoSettings.ConnectionString; options.DatabaseName = mongoSettings.DatabaseName; }) .AddDefaultTokenProviders(); // 启用身份验证和授权中间件 var app = builder.Build(); app.UseAuthentication(); app.UseAuthorization(); // 后续路由、中间件配置... app.Run();
注:
MongoDbSettings是自定义配置类,对应appsettings.json中的连接字符串和数据库名称:"MongoDbSettings": { "ConnectionString": "mongodb://localhost:27017", "DatabaseName": "IdentityDb" }
4. 使用Identity核心服务
和EF Core版本的用法完全一致,注入UserManager<AppUser>、SignInManager<AppUser>、RoleManager<AppRole>即可执行身份管理操作:
public class AccountService { private readonly UserManager<AppUser> _userManager; private readonly SignInManager<AppUser> _signInManager; public AccountService(UserManager<AppUser> userManager, SignInManager<AppUser> signInManager) { _userManager = userManager; _signInManager = signInManager; } // 用户注册示例 public async Task<IdentityResult> RegisterUser(string email, string password, string nickName) { var user = new AppUser { UserName = email, Email = email, NickName = nickName }; return await _userManager.CreateAsync(user, password); } // 用户登录示例 public async Task<SignInResult> LoginUser(string email, string password, bool rememberMe) { var user = await _userManager.FindByEmailAsync(email); if (user == null) return SignInResult.Failed; return await _signInManager.PasswordSignInAsync(user, password, rememberMe, lockoutOnFailure: false); } }
三、实现SQL Server+EF Core+MS Identity 等效效果
AspNetCore.Identity.MongoDbCore完全兼容ASP.NET Core Identity的原生API,所以可以直接沿用EF版本的开发模式:
- 核心服务(
UserManager/SignInManager/RoleManager)的方法签名、行为与EF版本完全一致,支持所有常用操作:用户创建/查询/修改、角色分配、密码重置、邮箱确认、登录登出等。 - 支持Identity的所有核心特性:密码哈希加密、安全令牌生成、角色授权、声明管理、锁定机制等。
- 自定义用户/角色字段的方式和EF版本一致,仅需继承对应的Mongo基类。
- 中间件配置逻辑基本相同,仅替换存储实现,业务代码无需大幅修改,可无缝切换。
内容的提问来源于stack exchange,提问作者Harsh Patel
相关产品推荐
相关产品推荐

