ASP.NET Core Identity 如何从应用A向应用B的独立数据库创建用户
实现方案
你不需要添加完整的第二个Identity框架实例,只需要为应用B的Identity数据库单独配置专属的DbContext和对应的UserManager即可,操作步骤如下:
步骤1:定义应用B专属的Identity实体和DbContext
为了和应用A本地的Identity用户区分,先定义应用B的用户实体(如果字段和默认IdentityUser完全一致也可以直接用IdentityUser,建议单独定义避免混淆),再创建对应DbContext:
// 应用B专属用户实体,可根据应用B的Identity配置自定义字段 public class AppBIdentityUser : IdentityUser { } // 应用B专属Identity DbContext public class AppBIdentityDbContext : IdentityDbContext<AppBIdentityUser> { public AppBIdentityDbContext(DbContextOptions<AppBIdentityDbContext> options) : base(options) { } }
步骤2:添加应用B的数据库连接字符串
在appsettings.json中添加应用B的数据库连接配置:
{ "ConnectionStrings": { "DefaultConnection": "应用A的内网数据库连接串", "AppBIdentityConnection": "应用B的数据库连接串" } }
步骤3:在Startup中注册应用B的相关服务
注意不要再次调用AddDefaultIdentity,避免覆盖应用A本地的Identity配置,手动注册AppB的DbContext和专属UserManager:
// 原有应用A的配置保留不变 services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer( Configuration.GetConnectionString("DefaultConnection"))); services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true) .AddEntityFrameworkStores<ApplicationDbContext>(); // 新增应用B的相关配置 services.AddDbContext<AppBIdentityDbContext>(options => options.UseSqlServer( Configuration.GetConnectionString("AppBIdentityConnection"))); // 注册应用B专属的UserManager,密码等配置要和应用B的Identity配置完全一致 services.AddIdentityCore<AppBIdentityUser>(options => { // 此处密码、账号规则必须和应用B的Identity配置保持一致,避免后续应用B验证失败 options.Password.RequireDigit = true; options.Password.RequireLowercase = true; options.Password.RequireUppercase = true; options.Password.RequireNonAlphanumeric = true; options.Password.RequiredLength = 6; options.SignIn.RequireConfirmedAccount = true; }) .AddEntityFrameworkStores<AppBIdentityDbContext>() .AddDefaultTokenProviders();
步骤4:在业务代码中注入应用B的UserManager创建用户
直接注入UserManager<AppBIdentityUser>即可操作应用B的Identity数据库:
@using Microsoft.AspNetCore.Identity; @* 注入应用A本地的UserManager *@ @inject UserManager<IdentityUser> appAUserManager; @* 注入应用B专属的UserManager *@ @inject UserManager<AppBIdentityUser> appBUserManager; <button class="btn btn-danger" @onclick="AddAppBUser">添加应用B用户</button> @code { private async Task AddAppBUser() { var user = new AppBIdentityUser() { Email = "john@test.com", UserName = "john@test.com" }; await appBUserManager.CreateAsync(user); await appBUserManager.AddPasswordAsync(user, "TestPassword_123"); await appBUserManager.ConfirmEmailAsync(user, await appBUserManager.GenerateEmailConfirmationTokenAsync(user)); } }
注意事项
- 应用A中
AppBIdentityDbContext的表结构、Identity配置(密码规则、用户名规则、邮箱确认要求等)必须和应用B的Identity配置完全一致,避免用户在应用B端登录验证失败 - 执行迁移时需要单独为
AppBIdentityDbContext生成迁移文件,确保生成的表结构和应用B的Identity表完全匹配 - 应用A仅需开放对应用B数据库的写入权限,不需要开放读取权限,符合安全要求
内容的提问来源于stack exchange,提问作者Luca
相关产品推荐
相关产品推荐

