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

如何使用C#借助当前已认证会话连接同应用内的SignalR Hub?

在C#中借助已认证会话连接同应用内的SignalR Hub

完全可以借助当前已认证会话连接同应用内的SignalR Hub,核心是把当前会话的认证凭证传递给SignalR连接,具体实现分两种常见场景:

1. Cookie认证场景(ASP.NET Core默认认证方式)

如果你的应用使用Cookie认证,只需将当前会话的Cookie注入到SignalR的HttpClient中即可:

// 假设在ASP.NET Core的Controller/Service中,通过HttpContext获取当前会话的Cookie
var cookieContainer = new CookieContainer();
var currentCookies = Request.Cookies;
foreach (var cookie in currentCookies)
{
    cookieContainer.Add(new Uri("https://currentsite.com"), new Cookie(cookie.Key, cookie.Value));
}

var connection = new HubConnectionBuilder()
    .WithUrl("https://currentsite.com", options =>
    {
        options.HttpMessageHandlerFactory = _ => new HttpClientHandler
        {
            CookieContainer = cookieContainer
        };
    })
    .Build();

await connection.StartAsync();
await connection.InvokeAsync("test");

如果是在Blazor WebAssembly中,可直接复用已配置的HttpClient(它会自动携带当前会话Cookie):

// 注入IHttpClientFactory获取已配置的客户端
var httpClient = _httpClientFactory.CreateClient("YourAppClient");

var connection = new HubConnectionBuilder()
    .WithUrl("https://currentsite.com", options =>
    {
        options.HttpClient = httpClient;
    })
    .Build();

2. Bearer令牌认证场景(JWT/OAuth2)

如果应用使用Bearer令牌认证,通过WithAccessTokenProvider配置令牌获取逻辑,直接复用当前会话的令牌:

// 从当前会话获取访问令牌(比如从HttpContext、TokenProvider或本地存储中)
var accessToken = "当前会话的Bearer令牌";

var connection = new HubConnectionBuilder()
    .WithUrl("https://currentsite.com", options =>
    {
        options.AccessTokenProvider = () => Task.FromResult(accessToken);
    })
    .Build();

await connection.StartAsync();
await connection.InvokeAsync("test");

在ASP.NET Core后端中,也可以从HttpContext直接获取令牌:

var accessToken = await HttpContext.GetTokenAsync("access_token");
// 后续同上配置SignalR连接

注意事项

  • 确保SignalR Hub的认证策略与当前应用的认证体系一致
  • 若为跨域场景(即使是同应用不同子域名),需额外配置CORS允许携带凭证

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:55:03