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

ASP.NET Core 8默认Identity令牌认证失效:404错误求助

问题原因
  1. 默认认证/挑战方案未指定为Bearer:当前配置仅添加了Bearer令牌支持,但未将其设置为默认认证和挑战方案,Identity默认使用Cookie认证逻辑,未认证时会触发重定向到登录页面的行为。
  2. 令牌生成方式错误:GenerateUserTokenAsync生成的是用于密码重置、邮箱验证等场景的一次性用途令牌,并非Bearer认证所需的标准访问令牌,无法被Bearer认证中间件识别验证。
  3. 令牌存储逻辑不符合Bearer认证要求:手动存储的令牌未关联到Bearer认证的令牌类型,Bearer中间件无法从请求中验证该令牌的有效性。

解决方案

1. 配置默认认证与挑战方案

修改Program.cs中的认证配置,明确将Bearer设置为默认方案:

builder.Services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme = IdentityConstants.BearerScheme;
    options.DefaultChallengeScheme = IdentityConstants.BearerScheme;
})
.AddBearerToken(IdentityConstants.BearerScheme);

2. 使用Identity的Bearer令牌生成方法

替换服务中的令牌生成逻辑,使用.NET 8+新增的GenerateUserBearerTokenAsync方法生成标准Bearer访问令牌:

public async Task<TokenDto> GenerateAndStoreTokenAsync(string username)
{
    if (string.IsNullOrEmpty(username))
        return null;

    var user = await _userManager.FindByNameAsync(username);
    if (user == null)
        return null;

    // 生成符合Bearer标准的访问令牌
    var tokenResult = await _userManager.GenerateUserBearerTokenAsync(user, IdentityConstants.BearerScheme);
    return new TokenDto { Token = tokenResult.Token };
}

说明:GenerateUserBearerTokenAsync会自动处理令牌的签名、有效期、用户声明等信息,无需手动存储,令牌本身包含所有验证所需数据,由Bearer中间件自动解析验证。

3. 确保请求携带正确的Bearer令牌

调用授权API时,必须在请求头中添加Authorization: Bearer {token},示例请求:

GET /api/xxx/securedata
Headers:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

4. 移除不必要的中间件(可选)

API应用无需静态文件支持,可移除UseStaticFiles中间件,避免潜在的流程干扰:

// app.UseStaticFiles(); // 删除此行

验证步骤
  1. 重新启动应用,调用Login/Register接口获取新的Bearer令牌;
  2. 携带令牌调用/securedata接口,确认返回200 OK及用户信息;
  3. 移除令牌或使用无效令牌调用接口,确认返回401 Unauthorized而非404。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:39:56