Аутентификация внешних запросов. Best Practice
Добрый день.
Планируем использовать свой конфигурационный сервис для интеграции со сторонним приложением. Стороннее приложение всегда будет аутентифиицироваться под одним и тем же пользователем в BPMonline. В связи с этим хотелось бы оптимизировать этот процесс.
Как показывают тесты, выполнение логина каждый раз перед обращение к конфигурационному сервису сильно замедляет процесс получения полезного ответа (примерно в 2 раза), увеличивает трафик, нагрузку на сервер приложений и тд.
В связи с этим пара вопросов:
1. Как регулярно нужно аутентифицироваться в BPMonline ?
2. Можно ли перед тем как обращаться к конфигурационному сервису как-то убедиться, что аутентификация успешно выполнена и непросрочена, не посылая дополнительных запросов в BPM?
Вот такой код не работает, поскольку свойства Expires и Expired заполняются только у куки UserName и там примерно сутки время жизни, а 401 ошибку мы начинаем получать гораздо раньше
public static bool CheckCookiesValid() { var cookieContainer = LoginClass.AuthCookie; var cookies = cookieContainer.GetCookies(new Uri(serviceUri)); if (cookies.Count < 4) { return false; } foreach (Cookie cookie in cookies) { if (cookie.Expired) { return false; } } return true; }
или же не стоит с этим всем заморачиваться и просто каждый раз перед обращением к сервису делать LoginClass.TryLogin ?
полный исходник прилагаю
Нравится
Каждый раз авторизироваться точно не стоит, это захламляет таблицу SysUserSession, которая вырастает до огромного объёма и каждая вставка в неё проходит всё тяжелее.
Пример работы с авторизацией, а затем с данными по интеграции есть в академии.
Прерывание сессии раньше срока может быть вызвано различными причинами, например, очисткой Redis на сервере. Если при попытке считать или записать данные выдало об отсутствии авторизации, проще авторизироваться раз повторно и далее работать уже с новыми куками.