【发布时间】:2020-10-10 09:19:00
【问题描述】:
Cookie 是我对 Web 开发最大的挫败感,它们困扰了我多年。我只想说“我讨厌 Cookie”……还有 CORS。 (请注意,我知道它们是保护我们的重要安全功能。)
我正在开发一个 Blazor WebAssembly 应用程序,我在控制器上使用 Cookie 身份验证登录用户,我可以看到该 cookie 正在所有后续请求中发送。
但 cookie 并未在发送到 SignalR Hub 的连接请求时发送。
我的目标是通过用户登录时应出现的声明对与 Hub 的所有连接进行分组。
但是我当然不能再进一步了,因为我看不到任何声明。
这是我在服务器上的TeamHub:
[Authorize]
public class TeamHub : Hub
{
public async override Task OnConnectedAsync()
{
await base.OnConnectedAsync();
var key = Context.User.Claims.FirstOrDefault(c => c.Type == IdentityUserClaims.ClientKey)?.Type;
if (!string.IsNullOrWhiteSpace(key))
{
await 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
});
await Groups.AddToGroupAsync(Context.ConnectionId, key);
}
}
这是我连接到集线器的代码:
这里有一些代表允许我配置请求,但我不知道在此处放置什么来为每个请求设置 cookie:
hubConnection = new HubConnectionBuilder()
.WithUrl($"{Global.Api}teamhub", configure =>
{
configure.WebSocketConfiguration = opt =>
{
};
})
.Build();
【问题讨论】:
-
是的,我已经看到了 JWT 这个术语,但是让基于 Cookie 的身份验证工作真是一场噩梦,现在我发现还有另一个......从文档看来它应该可以工作使用 Cookie,连接是一个普通的旧 HTTP 请求,那么为什么它没有设置 cookie docs.microsoft.com/en-us/aspnet/core/signalr/…
标签: c# asp.net-core cookies blazor asp.net-core-signalr