C# 信号器核心不发送cookie

C# 信号器核心不发送cookie,c#,asp.net-core,cookies,blazor,asp.net-core-signalr,C#,Asp.net Core,Cookies,Blazor,Asp.net Core Signalr,Cookie是我在web开发中遇到的最大挫折,多年来一直困扰着我。我只想说“我讨厌饼干”。。。还有科尔斯。(请注意,我知道它们是保护我们的重要安全功能。) 我正在开发Blazor WebAssembly应用程序,我在控制器上使用Cookie身份验证登录用户,我可以看到Cookie正在所有后续请求中发送。 但是cookie没有在连接请求时发送到信号器集线器 我的目标是根据用户登录时应出现的声明对所有连接到集线器的连接进行分组。 但我当然不能再往前走了,因为我看不到任何主张 这是我在服务器上的Tea

Cookie是我在web开发中遇到的最大挫折,多年来一直困扰着我。我只想说“我讨厌饼干”。。。还有科尔斯。(请注意,我知道它们是保护我们的重要安全功能。)

我正在开发Blazor WebAssembly应用程序,我在控制器上使用Cookie身份验证登录用户,我可以看到Cookie正在所有后续请求中发送。
但是cookie没有在连接请求时发送到信号器集线器

我的目标是根据用户登录时应出现的声明对所有连接到集线器的连接进行分组。
但我当然不能再往前走了,因为我看不到任何主张

这是我在服务器上的
TeamHub

[授权]
公共类TeamHub:Hub
{
公共异步覆盖任务OnConnectedAsync()
{
等待base.OnConnectedAsync();
var key=Context.User.Claims.FirstOrDefault(c=>c.Type==IdentityUserClaims.ClientKey)?.Type;
如果(!string.IsNullOrWhiteSpace(键))
{
等待Clients.Groups(key).SendAsync(“memberConnected”,new ConnectedMemberResult())
{
Id=Context.User.Claims.FirstOrDefault(c=>c.Type==ClaimTypes.NameIdentifier)?.Value,
FirstName=Context.User.Claims.FirstOrDefault(c=>c.Type==IdentityUserClaims.FirstName)?.Value,
LastName=Context.User.Claims.FirstOrDefault(c=>c.Type==IdentityUserClaims.LastName)?.Value,
OnlineStatus=OnlineStatus.Online
});
wait Groups.AddToGroupAsync(Context.ConnectionId,key);
}
}
这是我连接到集线器的代码:
这里有一些代表允许我配置请求,但我不知道在这里放什么来设置每个请求的cookie:

hubConnection=新的HubConnectionBuilder()
.WithUrl($“{Global.Api}teamhub”,configure=>
{
configure.WebSocketConfiguration=opt=>
{
};
})
.Build();

…我几乎得到了答案。
为了让Cookies与Blazor一起工作,我必须创建一个
MessageHandler

public class CredentialsDelegatingHandler:DelegatingHandler
{
公共证书授权处理程序()
{
InnerHandler=新的HttpClientHandler();
}
受保护的覆盖异步任务SendAsync(HttpRequestMessage请求,CancellationToken CancellationToken)
{
request=request.SetBrowserRequestCredentials(BrowserRequestCredentials.Include);
返回wait base.sendaync(请求、取消令牌);
}
}
...
services.AddSingleton(新的HttpClient(新的CredentialsDelegatingHandler())
{
BaseAddress=新Uri(Builder.HostenEnvironment.BaseAddress)
});
我只需要在这里使用相同的处理程序:

hubConnection=新的HubConnectionBuilder()
.WithUrl($“{Global.Api}teamhub”,configure=>
{
configure.HttpMessageHandlerFactory=消息=>
{
返回新凭证DelegatingHandler();
};
})
.Build();

是的,我见过JWT这个词,但基于Cookie的身份验证工作起来真是一场噩梦,现在我发现还有另一个…从文档中看,它似乎应该与Cookie一起工作,连接是一个普通的HTTP请求,为什么它没有设置Cookies