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

.NET Identity /login端点无法返回Bearer Token求助

.NET Identity /login端点无Bearer Token返回问题排查

核心问题

你碰到的/login只返回200 OK却没有Bearer Token的情况,十有八九是认证配置里缺了JWT Bearer的生成逻辑,或者SignInManager被改成只走Cookie认证了。

排查步骤及解决办法

1. 检查JWT Bearer服务是否正确配置

你的项目必须先注册JWT Bearer认证服务,并且配置好密钥、签发方、受众这些参数。要是之前的配置被删了或者注释掉,SignInManager根本没法生成Token。

对应你提供的构建方法,正确的配置应该是这样:

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 = builder.Configuration["Jwt:Issuer"],
        ValidAudience = builder.Configuration["Jwt:Audience"],
        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]))
    };
});

2. 确认Identity配置支持Token生成

用MapIdentityApi<TUser>的时候,得保证SignInManager的配置允许生成Bearer Token。要是你的Identity只开了Cookie认证,登录后自然只会返回Cookie,不会出Token。

检查AddIdentityCore或者AddIdentity的配置:

builder.Services.AddIdentityCore<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddSignInManager()
    .AddDefaultTokenProviders();

注意:AddIdentityCore默认不会加Cookie认证,但如果手动加了Cookie认证又没配JWT,SignInManager会优先用Cookie。

3. 检查MapIdentityApi的路由配置

确保在路由里正确调用了MapIdentityApi<ApplicationUser>(),而且没被自定义的/login端点或者中间件拦截响应。要是后来加了自己的登录逻辑,可能把原始的Token返回给覆盖了。

正确的路由配置示例:

app.MapIdentityApi<ApplicationUser>();
app.MapControllers();

4. 排查登录逻辑是否被修改

要是你自定义了SignInManager,或者在登录时改了AuthenticationProperties,可能会跳过Token生成。比如登录时强制指定用Cookie方案,就不会生成Bearer Token:

// 错误示例:硬指定Cookie方案
await _signInManager.PasswordSignInAsync(user, password, isPersistent, lockoutOnFailure: false);
// 正确做法:别指定方案,让SignInManager按配置自动选
// 或者明确指定JWT方案(如果需要)

5. 检查配置文件的JWT参数

appsettings.json里的JWT参数必须存在且有效,Key的长度至少16字节,不然加密逻辑会出问题:

{
  "Jwt": {
    "Key": "your-strong-secret-key-at-least-16-characters",
    "Issuer": "your-issuer-url",
    "Audience": "your-audience-url"
  }
}

快速验证方案

先把所有自定义的认证中间件、端点都去掉,只保留基础的Identity和JWT配置,重启项目后调用/login,看有没有Token返回。如果正常了,再一点点加回自定义代码,排查哪部分出的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 13:36:06