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

如何在Blazor WebAssembly中使用Windows NTLM认证连接SignalR Hub

Blazor WebAssembly通过Windows NTLM认证连接SignalR Hub的解决方案

由于浏览器沙箱限制,UseDefaultCredentials = true在Blazor WASM中不被支持,必须依赖浏览器内置的NTLM协商机制来实现认证,以下是具体配置步骤:

一、服务端(ASP.NET Core)配置

  1. 启用Windows认证和SignalR服务
    在Program.cs中添加认证中间件并配置SignalR:
var builder = WebApplication.CreateBuilder(args);

// 配置Windows认证(使用Negotiate方案,支持NTLM和Kerberos)
builder.Services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
    .AddNegotiate();

// 配置授权策略,确保所有请求都需要认证
builder.Services.AddAuthorization(options =>
{
    options.FallbackPolicy = options.DefaultPolicy;
});

// 注册SignalR服务
builder.Services.AddSignalR();

var app = builder.Build();

app.UseHttpsRedirection();

// 启用认证和授权中间件
app.UseAuthentication();
app.UseAuthorization();

// 映射你的SignalR Hub
app.MapHub<YourHub>("/yourHubEndpoint");

app.Run();
  1. 服务器环境配置
  • 如果用Kestrel:确保服务器已加入域,Kestrel会自动支持NTLM协商;
  • 如果部署在IIS:在站点属性中启用Windows认证,禁用匿名认证。

二、Blazor WebAssembly客户端配置

在客户端Program.cs中配置SignalR连接时,启用WithCredentials,让浏览器自动处理NTLM凭据发送:

builder.Services.AddScoped(sp =>
{
    var navManager = sp.GetRequiredService<NavigationManager>();
    var hubConnection = new HubConnectionBuilder()
        .WithUrl($"{navManager.BaseUri}yourHubEndpoint", options =>
        {
            // 关键:告诉浏览器发送凭据(NTLM协商需要这个)
            options.WithCredentials = true;
            // 不要设置UseDefaultCredentials,浏览器不支持该属性
        })
        .Build();

    return hubConnection;
});

三、跨域(CORS)配置(若客户端与服务端不同源)

如果Blazor客户端和SignalR服务端不在同一域名下,必须在服务端配置CORS允许凭据传递:

builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowBlazorClient", policy =>
    {
        policy.WithOrigins("https://your-blazor-client-url.com")
              .AllowAnyHeader()
              .AllowAnyMethod()
              .AllowCredentials(); // 必须启用,否则浏览器不会发送NTLM凭据
    });
});

// 在管道中启用CORS
app.UseCors("AllowBlazorClient");

四、核心注意事项

  • 浏览器仅在同源请求或已配置允许凭据的CORS请求下,才会自动发起NTLM协商;
  • 客户端浏览器必须处于域环境中(已登录域账号),才能自动提供NTLM凭据;
  • 不要手动设置Authorization头,NTLM认证依赖浏览器与服务端的握手过程,无需手动干预;
  • 测试时确保服务端已禁用匿名认证,否则浏览器不会触发NTLM协商。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 07:00:56