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

基于Duende IdentityServer的Blazor WASM应用Docker部署500错误排查

问题描述

我创建了一个采用「独立账户」认证类型的Blazor WebAssembly项目,使用Duende IdentityServer(已获取社区许可证)。本地环境运行正常,但部署到生产环境(Docker+Caddy反向代理)后出现500错误,日志报错如下:

fail: Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler[3]
      Exception occurred while processing message.
      System.NullReferenceException: Object reference not set to an instance of an object.
         at Microsoft.AspNetCore.ApiAuthorization.IdentityServer.IdentityServerJwtBearerOptionsConfiguration.ResolveAuthorityAndKeysAsync(MessageReceivedContext messageReceivedContext)
         at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.HandleAuthenticateAsync()

我尝试添加ForwardedHeaders配置但未解决问题,配置代码如下:

builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
    options.ForwardedHeaders =
        ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
});
解决方案

针对生产环境出现的空引用错误,可从以下几个方向排查修复:

  • 完善ForwardedHeaders配置
    仅配置转发头类型不足以让ASP.NET Core信任反向代理的头信息,需要添加Caddy容器的IP到允许列表,同时调整中间件顺序。修改后的配置如下:

    builder.Services.Configure<ForwardedHeadersOptions>(options =>
    {
        options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
        // 添加Docker环境中Caddy的内部IP,可根据实际子网调整
        options.KnownProxies.Add(IPAddress.Parse("172.17.0.1"));
    });
    
    // 在Program.cs中,确保UseForwardedHeaders放在认证、路由中间件之前
    var app = builder.Build();
    app.UseForwardedHeaders();
    // 后续的UseAuthentication、UseAuthorization等中间件
    
  • 修正IdentityServer的Authority地址
    检查Blazor WASM项目的appsettings.json,确保Authority字段设置为生产环境的公开域名(比如https://your-identity-server-domain.com),而非容器内部的私有地址。同时API项目(若存在)的配置中,Authority也要同步更新,并且RequireHttpsMetadata需设为true。

  • 调整Caddy反向代理配置
    确保Caddy在转发请求时正确传递必要的头信息,避免ASP.NET Core无法识别正确的请求地址。示例Caddyfile配置:

    your-blazor-domain.com {
        reverse_proxy http://blazor-container:5000 {
            header_up Host {host}
            header_up X-Real-IP {remote_host}
            header_up X-Forwarded-For {remote_host}
            header_up X-Forwarded-Proto {scheme}
        }
    }
    
  • 验证IdentityServer元数据可用性
    在生产环境中访问{你的IdentityServer域名}/.well-known/openid-configuration,确认能正常返回JSON格式的元数据。如果无法访问,说明IdentityServer的部署或域名解析存在问题,导致Blazor应用无法获取授权密钥,进而触发空引用错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 16:32:34