【问题标题】:Getting JWT token in SignalR hub在 SignalR 集线器中获取 JWT 令牌
【发布时间】:2018-01-06 06:36:06
【问题描述】:

我有两个要求:

  1. 我希望我的 SignalR 集线器需要身份验证
  2. 当请求进来时,我希望它带有JWT token 所以 我可以获取用户数据。

请务必注意,我使用的 SignalR Core 仍处于 Alpha 阶段,看起来 API 发生了一些变化。

在过去的几个小时里,我一直在对此进行一些研究,但我对如何在客户端传递 JWT Token 并在服务器端接收它感到有些困惑。

【问题讨论】:

标签: signalr signalr-hub asp.net-core-signalr


【解决方案1】:

您可以在连接到集线器时将 jwt 作为查询字符串参数传递,然后将令牌作为标头添加到中间件中。这是一个非常基本的例子。

JS

let connection = new signalR.HubConnection('http://localhost/messagesHub', {jwtBearer: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ'});

connection.on('Send', data => {
    console.log(data);
});

connection.start()
          .then(() => connection.invoke('Send', 'test'));

添加到您的 Startup.cs Configure{} 靠近顶部,尽可能高

app.Use(async (context, next) =>
{
    if (context.Request.Query.TryGetValue("token", out var token))
    {
        context.Request.Headers.Add("Authorization", $"Bearer {token}");
    }
    await next.Invoke();
});

由于令牌已添加到中间件的标头中,因此它应该像普通的 JWT 身份验证一样使用与您在任何其他应用中使用的配置相同的配置。

请注意您在查询字符串中传递了 JWT,因此请注意不同的安全问题并进行更改以帮助解决它们(例如 https)

【讨论】:

    猜你喜欢
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 2021-10-20
    相关资源
    最近更新 更多