. Net Core 3.1 Клиент SignalR - Как добавить строку токена JWT в конфигурацию соединения SignalR? - PullRequest
0 голосов
/ 27 января 2020

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

В приведенном ниже примере кода строковая переменная "tokenString" уже настроена как фактический токен, и поэтому я не нужно вызывать внешний метод для создания токена, эта часть уже была выполнена до того, как я достигну этого метода. Используя debug, а также проверяя значение «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();

1 Ответ

0 голосов
/ 27 января 2020

Проблема заключалась в том, что атрибут [Authorize], который я настроил в классе-концентраторе SignalR, был необходим для определения используемой схемы аутентификации, одного атрибута [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 Базовое клиентское соединение:

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

await localConConnection.StartAsync();
...