Asp.net core SignalR Core JS客户端未通过“上的授权头”;“升级”;要求
我必须使用ASP.NETCore实现推送通知服务。显而易见的选择是使用信号机核心 我们的平台设置正在使用Azure App gateway,它被配置为不允许未经验证的请求 我们已设置与信号机的WebSocket通信 在发动机罩下,信号机核心遵循以下步骤:Asp.net core SignalR Core JS客户端未通过“上的授权头”;“升级”;要求,asp.net-core,signalr,Asp.net Core,Signalr,我必须使用ASP.NETCore实现推送通知服务。显而易见的选择是使用信号机核心 我们的平台设置正在使用Azure App gateway,它被配置为不允许未经验证的请求 我们已设置与信号机的WebSocket通信 在发动机罩下,信号机核心遵循以下步骤: POS../negociate->OK(使用集线器令牌和支持的传输) GET(发送升级头和WebSockets令牌)…/Hub?id={Hub_令牌}-?失败 在调查步骤2没有将连接升级到WebSocket连接的原因时,我注意到GET请求缺少授
有人试过解决办法吗?@aspnet/signar客户端的下一个版本是什么 您是否指定了
accessTokenFactory
let connection = new signalR.HubConnectionBuilder()
.withUrl("/myhub", {
accessTokenFactory: () => {
// Get and return the access token.
// This function can return a JavaScript Promise if asynchronous
// logic is required to retrieve the access token.
}
})
.build();
更多信息。因此最终解决方案是:
在浏览器中,随着HTTP 101升级一起发送JWT头是一个限制这正是不起作用的部分。JWT令牌将作为查询字符串发送,而不是作为标头的一部分发送。应该如此。您的示例是这样做的:../Hub?id=5u4uNZpKFNpEWyS5ioVhFg&access_-token={jwt-token}。。虽然JWT令牌应该在Authorization:bearer{JWT token}中,但signer的工作原理与您所说的一样:查询字符串中的令牌。您有责任从查询字符串参数中获取这些信息,然后验证您的授权堆栈中的令牌。我在原始帖子中说过,Azure AppGateway会阻止请求。因此,请求不会到达API本身。所以在“授权”中间件中没有什么需要处理的