我有两个要求:
SignalR
个中心需要身份验证JWT token
我可以获得用户数据。重要的是要注意我使用的SignalR Core
仍然使用Alpha,看起来API已经发生了一些变化。
过去几个小时我一直在研究这个问题,我对如何在客户端传递JWT Token
并在服务器端接收它感到困惑。
答案 0 :(得分:0)
当您连接到集线器时,可以将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尽可能高地配置顶部附近的{}
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 auth一样使用与在任何其他应用程序中使用的配置相同的配置。
请注意,您正在查询字符串中传递JWT,因此请注意不同的安全问题并进行更改以帮助对抗它们(如https)