Настройки схемы авторизации по токену для SignalR
Хочу сделать авторизацию через внешний сервис по токену. Подскажите как это сделать, кто с этим уже сталкивался.
Есть 2 системы:
- CRM - основной источник информации по пользователю(в этот сервис и будет отправлять токен через post запрос для получении информации по пользователю)
- Сам ЧАТ(SignalR) на ASP CORE NET
Логика:
Клиент находиться на сайте CRM и у него открывается чат
При подключении к чату --> со стороны CRM(фронтенда) отправляется token самой CRM в Чат Пример:
using (var client = new HttpClient()) { string token = Context.GetHttpContext().Request.Query["token"]; client.DefaultRequestHeaders.Add("X-Vsaas-Session", token); var result = await client.GetAsync($" {Program.DomainServerCrm}/api/chat/user"); if (result.StatusCode == HttpStatusCode.OK) { var user = await JsonSerializer.DeserializeAsync<User>(await result.Content.ReadAsStreamAsync()); // 1. Проверка пользователя на существование в БД var userDb = _context.Users .Include(u => u.Dialogs) .SingleOrDefault(u => u.Id == user.Id); if (userDb != null) { //При подключении добавляем во все группы этого юзера foreach (var item in userDb.Dialogs) { await Groups.AddToGroupAsync(Context.ConnectionId, item.Name); } ChatCollection.ClientConnection[Context.ConnectionId] = userDb; await base.OnConnectedAsync(); } } }
На стороне Чата будет использоваться token от CRM для авторизации.
Схема БАЗЫ ДАННЫХ ЧАТА:
Источник: Stack Overflow на русском