来自 Angular 的 SignalR Core 中的 JWT 身份验证

Posted

技术标签:

【中文标题】来自 Angular 的 SignalR Core 中的 JWT 身份验证【英文标题】:JWT authentication in SignalR Core from Angular 【发布时间】:2018-03-25 10:30:01 【问题描述】:

帖子几乎与this 问题相同,但我使用的是新的 SignalRCore (1.0.0 alpha2)。<PackageReference Include="Microsoft.AspNetCore.SignalR" Version="1.0.0-alpha2-final" />

在我的 .NET Core 2.0 中,我使用 OpenIddict 对服务器上的用户进行身份验证。在客户端我使用angular2-jwt。

现在我需要知道如何使用Authorization header access_token 连接服务器?我假设在尝试连接服务器时应该使用自定义请求标头。

这可以用新的 SignalR Core 完成吗?我发现 this 线程提到 websockets 不支持自定义标头,但我想知道 SignalR Core 团队是否做了一些魔术来支持这种情况。

【问题讨论】:

【参考方案1】:

当您使用 javascript 客户端时这是不可能的,因为一些底层 API(如 webSocket)不允许设置标头。这就是您需要使用 queryString 的原因。另外,这个thread on github 可能有用。

如果您正在使用 C# 客户端设置标头目前是不可能的,但这只是 API 的限制,应该在将来修复。

编辑

SignalR 现在拥有允许将 JWT 令牌传递给 C# 和 JavaScript 客户端的 API。现在也可以在使用 C# 客户端时设置标头。

【讨论】:

以上是关于来自 Angular 的 SignalR Core 中的 JWT 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core Angular - 根据登录用户发送不同的 SignalR 消息

使用 SIGNAL R 的 Angular 7 和 ASP.NET Core 2.2 的 CORS 策略问题

SignalR 授权无法在带有 Identity Server 的 asp.net core angular SPA 中开箱即用

SignalR .Net Core 多连接

来自控制器的 SignalR 调用

发现 ASP.NET Core SignalR