Я перешел с 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.info("SignalR Connected.");
} catch (err)
{
console.info(err);
setTimeout(start, 5000);
}
};
start();
Хаб использует атрибут [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 на app.UseEndpoints, которое применяется в 5.0. Похоже, это изменение является основной проблемой, которую мне трудно обойти. Это приносит с собой некоторые изменения авторизации, с которыми я не знаком и не могу найти никакой информации о:
app.UseRouting();
app.UseAuthorization();
app.UseAuthentication();
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<Hubs.RangeHub>("/range");
});
Переход от app.UseSignalR к этим строкам. Это используется только для управления сеансами пользователей. Может кто-то указать мне верное направление?
@user1986237 user1986237 Я больше не пытаюсь использовать jwt для пользовательских сеансов. Я пытаюсь понять, почему стандартная аутентификация cookie для signalr перестала работать в 5.0. Я думаю, что это связано с переключением на конечные точки, я просто не знаю, почему.





Это была паршивая неделя. Проблема заключалась в том, что app.UseAuthorization(); и приложение.UseAuthentication(); были в неправильном порядке. Они должны были выглядеть так:
app.UseAuthentication();
app.UseAuthorization();
Разочаровывает, когда решение такое простое.
Как вы назначаете
loginToken? Серверная часть не может проверить токен.