基于ASP.NET实现用户管理,搭建带ASP.NET Core Identity的外部应用Web API
ASP.NET Core Web API集成Identity解决方案
你的需求完全可实现,以下是两种可行操作路径:
方案一(推荐):直接基于Web API模板手动集成Identity
Web API模板默认没有内置Identity身份验证选项属于正常设计,Identity原生偏向带UI的Web应用,API场景需搭配Token认证手动集成,步骤如下:
- 创建空白ASP.NET Core Web API项目,身份验证选项选择「无」
- 安装所需NuGet包:
Microsoft.AspNetCore.Identity.EntityFrameworkCore Microsoft.EntityFrameworkCore.你使用的数据库Provider(比如SqlServer、Sqlite) Microsoft.AspNetCore.Authentication.JwtBearer(如使用JWT做API认证)
- 自定义Identity用户类和数据上下文:
// 自定义用户类,可扩展额外字段 public class AppUser : IdentityUser { } // Identity专属数据库上下文 public class AppIdentityDbContext : IdentityDbContext<AppUser> { public AppIdentityDbContext(DbContextOptions<AppIdentityDbContext> options) : base(options) { } }
- 在
Program.cs中注册服务和中间件:
// 注册数据库上下文 builder.Services.AddDbContext<AppIdentityDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("IdentityDb"))); // 注册Identity核心服务 builder.Services.AddIdentityCore<AppUser>(opt => { // 按需配置密码、账号规则 opt.Password.RequireDigit = true; opt.User.RequireUniqueEmail = true; }) .AddEntityFrameworkStores<AppIdentityDbContext>() .AddDefaultTokenProviders(); // 注册JWT认证服务(按需配置) builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(opt => { // 配置JWT的签发、校验规则 opt.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = builder.Configuration["Jwt:Issuer"], ValidAudience = builder.Configuration["Jwt:Audience"], IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"])) }; }); builder.Services.AddAuthorization(); builder.Services.AddControllers(); // --- 中间件配置顺序不能修改 --- var app = builder.Build(); app.UseHttpsRedirection(); app.UseRouting(); // 认证必须在授权之前 app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); app.Run();
- 执行EF Core迁移命令初始化Identity数据库表,后续可自行封装注册、登录、权限管理等API接口,直接调用Identity内置的
UserManager<AppUser>、SignInManager<AppUser>等工具类即可使用所有Identity能力。
方案二:修复现有Web App+API控制器的访问问题
你之前操作出现路由访问失败,90%概率是配置缺失,按以下步骤排查修复即可:
- 确认你的API控制器添加了
[ApiController]和[Route("api/[controller]/[action]")]特性,和Web App的Razor Pages路由做隔离 - 确认
Program.cs中已添加控制器服务注册和端点映射:
// 服务注册部分 builder.Services.AddControllers(); // 端点映射部分 app.MapControllers();
Web App默认模板只会注册Razor Pages相关服务,未添加控制器配置会导致API路由无法被识别。
- 如果需要API和Web页面使用不同的认证逻辑,给API控制器单独指定认证方案:
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)],避免和页面的Cookie认证冲突。 - 外部应用调用API前按需配置CORS跨域规则。
内容的提问来源于stack exchange,提问作者Bedrule Paul
相关产品推荐
相关产品推荐

