.Net Core 3.1 SignalR Client — как добавить строку токена JWT в конфигурацию подключения SignalR?

Я использую основной клиент SignalR .net в своем проекте с токенами JWT.

В приведенном ниже примере кода строковая переменная «tokenString» уже настроена как фактический токен, и поэтому мне не нужно вызывать внешний метод для создания токена, эта часть уже была выполнена до того, как я доберусь до этого метода. Используя отладку, а также проверяя значение «toeknString» на веб-сайте JWT, я знаю, что токен работает, просто я не знаю, как использовать готовый токен в методе подключения SignalR.

Как настроить подключение клиента SignalR для использования этого tokenString?

localConConnection = new HubConnectionBuilder()
                .WithUrl("https://localhost:44372/LocalConnectorHub", options => 
                {
                    options.AccessTokenProvider = () => Task.FromResult(tokenString); // Not working
                    // Need a solution like this: options.Token = tokenString
                })
                .WithAutomaticReconnect()
                .Build();

person OJB1    schedule 26.01.2020    source источник


Ответы (1)


Проблема заключалась в том, что атрибут [Authorize], который я настроил в классе SignalR Hub, должен был определить используемую схему аутентификации, одного атрибута [Authorize] было недостаточно.

Класс концентратора SignalR:

[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public class LocalConnectorHub : Hub
{
    public async Task SendToMacros(string serverName, string data)
    {
        await Clients.All.SendAsync("MacrosInbound", serverName, data);
    }


    public async Task ConnectorStatus(string serverName, string data)
    {
        await Clients.All.SendAsync("UpdateConnectorStatus", serverName, data);
    }
}

Подключение клиента SignalR .NET Core:

localConConnection = new HubConnectionBuilder()
                .WithUrl("https://localhost:44372/LocalConnectorHub", options => 
                {
                    options.AccessTokenProvider = () => Task.FromResult(tokenString); 
                })
                .WithAutomaticReconnect()
                .Build();

await localConConnection.StartAsync();
person OJB1    schedule 26.01.2020
comment
Искал именно это, единственное падение - обновить токен по истечении срока его действия. - person kabuto178; 11.02.2021