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

Vue.js+ASP.NET Core中JWT获取当前用户信息遇未授权问题

解决JWT获取当前用户信息时的未授权问题

以下是针对你遇到的未授权问题的具体修复步骤:

1. 恢复并配置[Authorize]特性与声明映射

你的GetCurrentUser方法注释掉了[Authorize],首先要恢复该特性,同时需要配置JWT声明与.NET标准Claim类型的映射,否则无法从User.Claims中正确获取邮箱和用户名:

修改Program.cs中的JWT配置部分:

.AddJwtBearer(x =>
{
    x.TokenValidationParameters = new TokenValidationParameters
    {
        ValidIssuer = config["JwtSettings:Issuer"],
        ValidAudience = config["JwtSettings:Audience"],
        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(config["JwtSettings:Key"])),
        ValidateIssuer = true, 
        ValidateAudience = true,
        ValidateLifetime = true,
        ValidateIssuerSigningKey = true
    };
    // 添加声明映射,将JWT标准声明映射到ClaimTypes
    x.ClaimActions.MapJsonKey(ClaimTypes.Email, JwtRegisteredClaimNames.Email);
    x.ClaimActions.MapJsonKey(ClaimTypes.Name, JwtRegisteredClaimNames.Sub);
});

同时恢复GetCurrentUser上的[Authorize]:

[HttpGet("Info")]
[Authorize]
public ActionResult<UserAccount> GetCurrentUser()
{
    // 方法内容保留
}

2. 修正JWT生成时的Audience参数

在SignIn接口生成JWT时,Audience错误地使用了Issuer值,导致与验证配置不匹配,修改如下:

var token = new JwtSecurityToken(
    issuer: configuration["JwtSettings:Issuer"],
    audience: configuration["JwtSettings:Audience"], // 替换为配置中的Audience
    claims: claims,
    expires: DateTime.Now.AddMinutes(30),
    signingCredentials: creds);

3. 移除UserAccount类中的冗余Password属性

UserAccount继承自IdentityUser,该类已通过PasswordHash管理密码,自定义的Password属性会干扰Identity的密码处理逻辑,直接删除:

public class UserAccount : IdentityUser
{
    // 删除此行:public string Password { get; set; } = string.Empty;
    public string UserType { get; set; } = string.Empty;
    public string JHFullName { get; set; } = string.Empty;
    // 其他属性保留
}

4. 优化Vue端的Token传递方式

路由参数传递Token可能存在截断或安全问题,建议改用localStorage存储Token:

// 登录成功后存储Token
// 示例:登录接口的then回调中
localStorage.setItem("jwtToken", response.data.token);

// 在UserSettingsView中获取Token
const token = localStorage.getItem("jwtToken");

同时打印Authorization头确认格式正确:

console.log("Authorization Header:", `Bearer ${token}`);

5. 验证JWT配置的一致性

确保appsettings.json中的JwtSettings配置项完整且前后端一致:

"JwtSettings": {
    "Issuer": "YourIssuerName",
    "Audience": "YourAudienceName",
    "Key": "YourSecretKeyMustBeAtLeast16CharactersLong"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 23:48:09