Безопасная аутентификация с использованием токена доступа - PullRequest
2 голосов
/ 18 июня 2019

У нас есть приложение Angular / TypeScript, которое использует технологию веб-сокетов SignalR для подключения к нашему C # .NET Core API.Для аутентификации мы отправляем наш токен доступа JWT, который мы затем можем получить и проверить на API.Это на самом деле прекрасно работает.

Однако проблема в том, что метод, используемый клиентом JavaScript веб-сокета для первоначального подключения к API, предоставляет наш токен доступа в GET-запросе.Журналы доступа к веб-серверу, журналы доступа балансировщика нагрузки, журналы прокси-серверов и другие распространенные корпоративные инструменты, такие как платформы анализа производительности, могут хранить конфиденциальную информацию, запрашиваемую методом HTTP GET.Ниже приведен код, который мы используем для подключения.

На входной стороне:

this._hubConnection = new HubConnectionBuilder()
  .withUrl(this.apiPath + ?authtoken=${localStorage.getItem('access_token')})
  .build();

На внутренней стороне:

if (context.Request.Path.Value.StartsWith("/hub") && 
context.Request.Query.TryGetValue("authtoken", out 
Microsoft.Extensions.Primitives.StringValues token))
{
    context.Token = token;
}

Это вызывает наш токен доступанепосредственно в строку запроса GET, чтобы все могли видеть.

Мы пробовали другие решения (ниже), но у нас все еще остается та же проблема. Здесь - это ссылка, где кто-то объясняет, что клиент JavaScript веб-сокета в настоящее время не поддерживает пользовательские заголовки.Есть ли способ обойти эту проблему?Нам нужно отправить токен доступа, чтобы он не подвергался опасности.

this._hubConnection = new HubConnectionBuilder()
  .withUrl(this.apiPath, { accessTokenFactory: () => localStorage.getItem('access_token') })
  .build();
...