#session #identity #web-development-server
Вопрос:
У нас есть несколько веб-приложений, использующих одного и того же поставщика удостоверений (которым мы также управляем), большинство из них (включая поставщика удостоверений) используют .ЧИСТОЕ ядро.
Требование состоит в том, что если пользователь вошел в систему в двух или более приложениях одновременно (в одном браузере) и активно использует одно приложение, это автоматически продлевает срок службы сеанса во всех приложениях.
Поэтому, пока он использует по крайней мере одно приложение, он не выходит ни из одного из них. Что является еще одним требованием: автоматический выход из системы после определенного времени бездействия (эта часть, конечно, проста)
Я подумал об использовании сервера Redis для управления временем жизни этого общего сеанса, используя идентификатор сеанса, который каждое приложение будет получать от сервера идентификации через утверждения. Поэтому каждый раз, когда пользователь выполняет какое-либо действие, серверная часть связывается с Redis и проверяет, активен ли сеанс пользователя, и продлевает срок службы сеанса, если да. Выйдите из системы, если это не так.
Проблема в том, что приложениям не разрешен прямой доступ к этому серверу Redis (по соображениям безопасности). Поэтому я подумал о добавлении отдельной веб-службы для этих приложений, с которыми можно связаться, используя стандартную конечную точку HTTP. Так что, по сути, я просто посредник между Redis и веб-приложением.
Есть ли лучший способ сделать это? Не уверен, насколько это распространенное требование.
Ответ №1:
Redis обычно принадлежит распределенному кэшу, что означает, что он расположен на другой ферме серверов. Таким образом, ваше приложение имеет ограничения, поскольку ему не разрешен доступ к внешнему серверу. Если ваше приложение находится в стадии разработки или если оно все еще находится в стадии роста, я рекомендую использовать кэш памяти или рассмотреть промежуточное программное обеспечение для кэширования ответов. Кроме того, это очень небольшие объемы данных, и если вы собираетесь хранить только их в кэше для начала, вы определенно рассмотрите возможность запоминания.
Конечно, я понимаю вашу потребность в Redis, и это все:
- Является согласованным (согласованным) между запросами к нескольким серверам.
- Переживает перезапуск сервера и развертывание приложений. И это потому, что ваш кэш обычно находится в другом месте (например, в Azure)
- Не использует локальную память.
- Является масштабируемым
- и т.д.
Для более крупных приложений Рассмотрите возможность замены кэша памяти на кэш распределенной памяти. Он в основном похож на кэш памяти, так как и память, и Распределенный кэш расположены на ферме серверов, где было запущено приложение. Только кэш памяти требует фиксированного сеанса, а кэш распределенной памяти-нет.