Как добавить пользовательские заголовки в клиент Tysecript SignalR? - PullRequest
1 голос
/ 08 января 2020

Я пытаюсь передать токен носителя в заголовке для авторизации клиентских подключений. Концентратор SignalR авторизует клиента, извлекая токен-носитель из заголовка. Я не могу изменить код концентратора SingalR для использования строки запроса для получения токена, а также не могу использовать встроенную функциональность токена JWT.

Как добавить пользовательский заголовок к клиенту машинописи SignalR?

Единственное, что я могу сделать, - это переопределить HttpClient для добавления заголовка, однако я не уверен, что это возможно или как это сделать.

Я использую @ microsoft / signalr в Angular 8 и последнюю версию пакета @ microsoft / signalr.

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

Если это просто для передачи токена-носителя, то нет необходимости создавать пользовательские заголовки, для передачи токена доступа вы можете использовать перегрузку withUrl, которая принимает IHttpConnectionOptions, этот интерфейс имеет accessTokenFactory, который можно использовать следующим образом:

yourAuthServicePromise.then(
  (data) => {
    if (data.['result']['accessToken']) {
      this.hubConnection = new signalR.HubConnectionBuilder()
        .withUrl('https://SIGNALR_SERVER_HUB_URL', {
          accessTokenFactory: () => {
            return data.['result']['accessToken'];
          }
        } as signalR.IHttpConnectionOptions)
        .build();
      this.hubConnection.start()
    }
  }
);

Не забудьте включить политику cors на хаб-сервере, чтобы разрешить JS происхождение клиента

1 голос
/ 10 января 2020

Вы можете добавить собственный HttpClient в опциях при построении соединения.

Это будет выглядеть примерно так:

class CustomHttpClient extends HttpClient {
  public send(request: HttpRequest): Promise<HttpResponse> {
    request.headers = { ...request.headers, "customHeader": "value" };
    // ... http call
  }
}

let hubConnection = new HubConnectionBuilder()
    .withUrl(url, { httpClient: new CustomHttpClient() })
    .build();

Возможно, унаследовано от DefaultHttpClient и при отправке вы вызываете отправку DefaultHttpClient, поэтому вам не нужно самостоятельно реализовывать вызовы Http.

Поддержка первого класса отслеживается https://github.com/dotnet/aspnetcore/issues/14588.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...