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

Angular+ASP.NET Core部署后JWT Token生成报500内部服务器错误

问题排查与解决方案

针对你部署公网后生成JWT Token出现500内部错误的问题,从以下几个方向逐一排查:

1. 先抓取具体错误日志

公网环境默认不会暴露详细错误信息,必须先获取具体异常:

  • 配置ASP.NET Core日志级别为Debug,在appsettings.json中添加:
    "Logging": {
      "LogLevel": {
        "Default": "Debug",
        "Microsoft.AspNetCore": "Debug"
      }
    }
    
  • 查看服务器日志:Windows主机查看「事件查看器」的应用程序日志;Linux主机查看syslog或应用程序的输出日志。日志会明确指出是配置读取失败、密钥问题还是编码错误。

2. 检查JWT配置的有效性

  • 确认公网环境的appsettings.json或环境变量中,Jwt:Key和Jwt:Issuer是否正确配置,有没有为空的情况。可在createJwtToken方法中临时添加日志输出这两个值,验证读取状态。
  • Jwt:Key长度必须符合算法要求:HmacSha256要求密钥至少16字节(16个字符),如果密钥过短会直接抛出异常,检查公网配置的密钥是否达标。

3. 统一编码方式

你的代码中存在编码不一致问题:

  • 认证配置里用Encoding.UTF8.GetBytes处理密钥
  • 生成Token时用Encoding.ASCII.GetBytes处理密钥
    如果密钥包含非ASCII字符,ASCII编码会丢失信息,导致生成Token时出错。统一改成UTF8编码:
// 修改createJwtToken中的密钥编码
var key = Encoding.UTF8.GetBytes(_config["Jwt:Key"]);

4. 修正时间处理逻辑

DateTime.Now会受服务器时区影响,建议换成DateTime.UtcNow避免时区差异导致的过期时间异常:

Expires = DateTime.UtcNow.AddMinutes(20)

5. 服务器环境检查

  • 确认公网服务器安装了与本地版本一致的ASP.NET Core运行时
  • Linux服务器需确保应用程序有读取配置文件的权限;Windows服务器检查应用池权限是否足够

修改后的完整createJwtToken方法示例

private string createJwtToken(Users user)
{
    var jwtTokenHandler = new JwtSecurityTokenHandler();
    var key = Encoding.UTF8.GetBytes(_config["Jwt:Key"]);
    var identity = new ClaimsIdentity(new Claim[] {
        new Claim(ClaimTypes.Role, user.Role),
        new Claim(ClaimTypes.Name, $"{user.FirstName} {user.LastName}"),
        new Claim(ClaimTypes.Email, user.Email)
    });
    var credentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256);
    var tokenDescriptor = new SecurityTokenDescriptor
    {
        Subject = identity,
        SigningCredentials = credentials,
        Expires = DateTime.UtcNow.AddMinutes(20)
    };
    var token = jwtTokenHandler.CreateToken(tokenDescriptor);
    return jwtTokenHandler.WriteToken(token);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:10:28