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

AspNetCore SignalR 1.0.0-rc1-final:C#托管客户端如何实现NTLM/Negotiate认证

在ASP.NET Core SignalR托管客户端中实现NTLM/Negotiate认证

好问题!在ASP.NET Core的SignalR托管客户端里,实现NTLM/Negotiate认证的方式和传统ASP.NET确实有差异,原来直接设置hubConnection.Credentials的方式不再适用,取而代之的是通过配置HTTP消息处理器来实现,我给你详细说下步骤:

核心实现代码

在创建HubConnection的时候,通过WithUrl方法的配置项来指定认证凭据:

var hubConnection = new HubConnectionBuilder()
    .WithUrl("https://your-signalr-hub-endpoint", options =>
    {
        // 使用当前用户的默认Windows凭据(对应原代码的DefaultNetworkCredentials)
        options.HttpMessageHandlerFactory = _ => new HttpClientHandler
        {
            UseDefaultCredentials = true
        };
    })
    .Build();

关键说明

  • UseDefaultCredentials = true的作用和你之前用的CredentialCache.DefaultNetworkCredentials完全一致,会自动使用当前运行客户端的Windows用户凭据来完成NTLM/Negotiate认证。
  • 如果需要指定特定的域用户凭据而非默认凭据,可以直接设置Credentials属性:
    options.HttpMessageHandlerFactory = _ => new HttpClientHandler
    {
        Credentials = new NetworkCredential("your-username", "your-password", "your-domain")
    };
    

额外注意事项

  • 确保你的SignalR服务器端已经启用了Windows认证:在ASP.NET Core项目中,需要添加Negotiate认证服务并启用认证中间件:
    // Program.cs中配置服务
    builder.Services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
        .AddNegotiate();
    
    // 启用中间件(要放在UseRouting之后,UseAuthorization之前)
    app.UseAuthentication();
    app.UseAuthorization();
    
  • 如果客户端是控制台应用或者非IIS托管的程序,要确保运行程序的用户拥有访问SignalR服务的权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:03:10