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
相关产品推荐
相关产品推荐

