【发布时间】:2021-03-28 16:40:12
【问题描述】:
我已从 Net core 3.1 迁移到 5.0,但更新后我无法让 signalR 连接。每当它尝试连接到集线器时,我都会收到 401 错误。
错误日志
2020-12-17 15:47:07.351 -08:00 [INF] AuthenticationScheme: Identity.Application was challenged.
2020-12-17 15:47:07.351 -08:00 [INF] Request finished HTTP/2 POST
https://blah.blah.org:5001/range/negotiate?negotiateVersion=1 text/plain;charset=UTF-8 0 - 401 0
- 4.4068ms
2020-12-17 15:47:12.355 -08:00 [INF] Request starting HTTP/2 POST
https://blah.blah.org:5001/range/negotiate?negotiateVersion=1 text/plain;charset=UTF-8 0
2020-12-17 15:47:12.355 -08:00 [INF] Authorization failed. These requirements were not met:
DenyAnonymousAuthorizationRequirement: Requires an authenticated user.
在 Startup.cs 中配置函数项
app.UseRouting();
app.UseAuthorization();
app.UseAuthentication();
app.UseCookiePolicy();
app.UseStaticFiles();
app.UseSession();
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<Hubs.RangeHub>("/range");
});
javascript
connection = connection || new signalR.HubConnectionBuilder()
.withUrl("/range")
.configureLogging(signalR.LogLevel.Information)
.build();
async function start()
{
try
{
await connection.start();
console.log("SignalR Connected.");
} catch (err)
{
console.log(err);
setTimeout(start, 5000);
}
};
start();
Hub 正在使用 [Authorize] 属性
[Authorize]
public class RangeHub : Hub
当我运行可能导致该问题的应用程序时,我还在 Visual Studio 的调试输出中看到了大量令人不安的异常:
Exception thrown: 'System.IO.IOException' in System.Net.Security.dll
Exception thrown: 'System.IO.IOException' in System.Private.CoreLib.dll
Exception thrown: 'System.IO.IOException' in System.Private.CoreLib.dll
Exception thrown: 'System.IO.IOException' in System.Private.CoreLib.dll
Exception thrown: 'System.Net.Sockets.SocketException' in
Exception thrown: 'System.Net.Sockets.SocketException' in System.Private.CoreLib.dll
Exception thrown: 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' in Microsoft.CSharp.dll
Exception thrown: 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' in Microsoft.CSharp.dll
Exception thrown: 'System.Net.Sockets.SocketException' in
Exception thrown: 'System.Net.Sockets.SocketException' in System.Private.CoreLib.dll
Exception thrown: 'System.InvalidOperationException' in Microsoft.AspNetCore.Routing.dll
Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll
Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll
Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll
还有其他人遇到这个问题吗?我花了几天时间尝试不同的东西,但没有回到核心 3,我不知道还能尝试什么。
-- 更新- 在玩了几天之后,我尝试恢复到核心 3.1,但将 app.UseSignalR 的更改留给了 5.0 强制执行的 app.UseEndpoints。看起来这种变化是我无法解决的主要问题。它带来了一些我不熟悉的授权更改,找不到任何信息:
app.UseRouting();
app.UseAuthorization();
app.UseAuthentication();
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<Hubs.RangeHub>("/range");
});
从 app.UseSignalR 转换到这些行。这仅用于管理用户会话。谁能指出我正确的方向?
【问题讨论】:
-
如何分配
loginToken?后端无法验证令牌。 -
@user1986237 我不再尝试将 jwt 用于用户会话。我试图弄清楚为什么 signalr 的标准 cookie 身份验证在 5.0 中停止工作。我认为这与切换到端点有关,我只是不确定为什么。
标签: asp.net-core authentication .net-core signalr http-status-code-401