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

.NET 7 Blazor WASM中JWT授权[Authorize]返回500错误排查

问题排查与解决

1. 中间件顺序错误(核心原因)

当前中间件管道中UseAuthentication和UseAuthorization的位置不符合ASP.NET Core的规范,正确顺序应先执行路由匹配,再执行认证授权逻辑——因为需要先确定请求对应的端点,才能对该端点应用认证授权规则。

错误顺序:

app.UseAuthentication();
app.UseAuthorization();
// ...
app.UseRouting();

修正后的正确顺序:

app.UseHttpsRedirection();

app.UseBlazorFrameworkFiles();
app.UseStaticFiles();

app.UseRouting(); // 先执行路由匹配
app.UseAuthentication(); // 再执行认证
app.UseAuthorization(); // 最后执行授权

app.UseSession();
app.MapRazorPages();
app.MapControllers();
app.MapFallbackToFile("index.html");

2. JWT生成方法的空引用风险

在BuildToken方法中,UserData user = new UserData();如果UserData类的Roles属性未初始化(默认值为null而非空集合),执行foreach (var userRole in userRoles)时会抛出NullReferenceException,导致Token生成失败或服务端内部异常。

解决方式:

  • 要么在UserData类中初始化Roles属性:
public class UserData
{
    // 其他属性...
    public List<string> Roles { get; set; } = new List<string>();
}
  • 要么在生成Token前做空值判断:
var userRoles = user.Roles ?? new List<string>();

3. Token验证参数配置建议

虽然当前注释掉了Issuer、Audience和Lifetime的验证,但生成Token时已经指定了这些字段,建议开启验证(取消注释),确保前后端配置一致,避免潜在的验证逻辑问题:

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"])),       
};

4. 客户端请求头重复添加问题

如果多次调用_httpClient.DefaultRequestHeaders.Add("Authorization", ...),会导致请求中存在多个Authorization头,引发服务端解析异常。建议改为先移除再添加:

_httpClient.DefaultRequestHeaders.Remove("Authorization");
_httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {token}");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:07:05