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

如何查看ASP.NET Core Identity自动生成的端点控制器并配置JWT密钥

ASP.NET Core Identity 8 相关问题解答

1. 查看自动创建的端点(无传统控制器)

Identity 8 的 MapIdentityApi 采用最小API实现,不会生成物理控制器类,所有端点逻辑都封装在扩展方法内部。在 Visual Studio 中查看的方式:

  • 右键点击 MapIdentityApi<IdentityUser>(),选择转到定义,可直接查看扩展方法源码,里面包含所有端点的路由规则和处理逻辑(比如 POST /account/register、POST /account/login 等)
  • 启动项目后,若配置了 Swagger,可通过 Swagger UI 查看所有可用端点的请求参数、响应格式等详细信息

2. 修改JWT签名密钥并添加密钥短语

默认情况下,开发环境中Identity 8 使用临时密钥生成JWT,生产环境必须配置固定签名密钥。具体步骤如下:

步骤1:在appsettings.json中添加配置

"JwtSettings": {
  "SecretKey": "你的密钥短语(建议长度不低于32位)",
  "Issuer": "你的应用域名",
  "Audience": "你的应用受众"
}

步骤2:在Program.cs中配置JWT选项

在 AddIdentityApiEndpoints 之后,添加JWT认证配置,用密钥短语生成签名密钥:

var jwtSettings = builder.Configuration.GetSection("JwtSettings");

// 配置JWT认证
builder.Services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
    options.TokenValidationParameters = new TokenValidationParameters
    {
        ValidateIssuer = true,
        ValidateAudience = true,
        ValidateLifetime = true,
        ValidateIssuerSigningKey = true,
        ValidIssuer = jwtSettings["Issuer"],
        ValidAudience = jwtSettings["Audience"],
        // 用密钥短语生成对称签名密钥
        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSettings["SecretKey"]))
    };
});

// 禁用默认Cookie跳转,改用JWT返回401
builder.Services.ConfigureApplicationCookie(options =>
{
    options.Events.OnRedirectToLogin = context =>
    {
        context.Response.StatusCode = StatusCodes.Status401Unauthorized;
        return Task.CompletedTask;
    };
});

步骤3:配置端点权限

公开接口(如注册、登录)可保留 AllowAnonymous,需要认证的接口需添加授权限制:

// 示例:需要认证的最小API端点
app.MapGet("/api/user/profile", (ClaimsPrincipal user) =>
{
    return Results.Ok(new { Username = user.Identity.Name });
}).RequireAuthorization();

3. Identity端点背后的核心逻辑

MapIdentityApi 提供的端点直接复用Identity核心服务(UserManager<TUser>、SignInManager<TUser>),核心逻辑如下:

  • POST /account/register:接收用户名、密码,调用 UserManager.CreateAsync 创建用户,返回创建结果
  • POST /account/login:验证用户名密码有效性,调用 SignInManager.CheckPasswordSignInAsync,验证通过后生成包含用户Claims的JWT令牌并返回
  • POST /account/refresh:验证刷新令牌有效性,生成新的访问令牌
  • POST /account/logout:JWT模式下仅告知客户端自行丢弃令牌;Cookie模式下清除认证Cookie
  • GET /account/manage/info:获取当前认证用户的基本信息
  • POST /account/manage/change-password:调用 UserManager.ChangePasswordAsync 修改用户密码

内容的提问来源于stack exchange,提问作者Ann

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:17:22