Подтвердить что ты не робот

Как работают серверы без гражданства?

Я пытаюсь понять это. Обычно каждый раз, когда система входа в систему пользователя, серверная сторона создаст сеанс, а пользовательская сторона клиента - cookie. Когда люди говорят о безгражданном сервере, с клиентской стороны с состоянием, что они означают? серверная сторона не нужно использовать сеанс отслеживать пользователя? использовать файлы cookie только на стороне клиента для проверки пользователя? если я сменю сервер, пользователь не заметит его и все еще может возобновить использование сервиса?

Как настроить spring -security для этого?

4b9b3361

Ответ 1

Отслеживание пользователя по серверам сложно для истинной стороне сервера без учета состояния. В большинстве случаев это сортируемый сервер без учета состояния, в котором логины являются исключением. Однако большая проблема с серверами без гражданства заключается в том, что кластеризация очень проста, поэтому вы можете масштабировать горизонтально.

В Java вы можете сделать его безстоящим, используя либо файлы cookie для хранения учетных данных, либо используя распределенные хэши. Как правило, люди принимают использование чего-то вроде memcache и говорят, что они не имеют состояния, поскольку состояние хранится вне веб-сервера. Это позволяет пользователю использовать любой веб-сервер в ферме и все еще безопасно аутентифицироваться. В Java мы имеем множество распределенных хэш-реализаций, которые вы можете использовать с spring, поэтому вам не нужно использовать memcache для этого.

Другой вариант заключается в использовании файлов cookie для хранения криптовального безопасного хэшированного билета под названием HMAC. Использование файлов cookie позволяет избежать использования сеанса, поэтому веб-сервер не имеет статуса. С помощью HMAC вы можете подписать блок данных, который не может быть подделан или создан третьей стороной и, как гарантируется, будет получен от вас. Это не требует внешних ресурсов сервера (кэш) для аутентификации пользователя, чтобы он мог масштабироваться лучше, но есть некоторые проблемы с безопасностью, о которых вы должны знать. FYI Google использует этот метод для масштабирования по горизонтали. Один HMAC не похож на SHA1 или другие цирто-хеши. Им нужен секретный ключ, который должен быть на каждом сервере фермы. Это также должно быть защищено с помощью симметричного ключа шифрования, чтобы убедиться, что он надежно хранится на сервере, если кто-то получит файл. Также информация HMAC хранится в ясности, поэтому, когда вы можете поместить имя пользователя или адрес электронной почты в файл cookie, фактический криптографический хэш доступен для всех. Если кто-то должен был получить этот куки файл, он мог бы маскарироваться как этот пользователь. Именно поэтому HMAC обычно действительны только в течение определенного периода времени. После этого они истекают, поэтому, если кто-то их получит, они не смогут получить доступ к этой учетной записи навсегда.

Итак, у HMAC есть эта слабость, и вы должны быть осторожны с тем, какие приложения вы используете в них. Было бы очень плохой идеей для Paypal использовать эту схему, потому что все, что мне нужно сделать, это получить ваш безопасный файл cookie, а затем передать все ваши средства мне. Большой потенциал - все, что ваше приложение действительно без гражданства.

Последний вариант - сохранить ваши сеансы java в распределенном хэше. Php и другие платформы будут сбрасывать свои сеансы в базе данных, бедный mans распределенный кеш или сбрасывать их в memcache. С Java вы можете сделать то же самое. Вы также можете помещать свои объекты сеанса в распределенный кеш. Этот вариант не понравился, потому что люди думают "круто, теперь я могу сбросить все, что захочу, в свою сессию, и он будет без гражданства". Однако, как и во всех распределенных кэшах, существуют ограничения на скорость передачи, время репликации и размер полезной нагрузки. Это справедливо для Java или Memcache. Держите свои сеансы маленькими, и это хорошо работает. Бросьте все на сессию, и вы вернетесь к проблемам масштабирования, которые у вас есть с одним сервером. И действительно, это, вероятно, хуже, чем если бы вы только что сделали свой сервер стойким, потому что иногда grid-вычисления хуже, чем один сервер.

Обновление: вот список распределенных библиотек кеширования Java, которые вы можете использовать для этого:

http://www.manageability.org/blog/stuff/distributed-cache-java

Ответ 2

Служба без состояния - это служба, которая не хранит данные на сервере приложений. Он считывает или записывает данные в базу данных, возвращает значение (или нет), и после этого вся информация о самой задаче забывается.

Служба состояний используется для выполнения транзакций, то есть серии задач, которые зависят от результата предыдущих задач. Самый простой пример - отправка заказа в интернет-магазине, где вы собираете свои товары в корзине покупок, а когда вы проверяете, вы вводите данные своей учетной записи на одной странице, сохраняете ее, затем указываете свой платежный адрес, храните его, затем подтвердите свой заказ и завершите сделку. Каждый шаг зависит от успешного результата предыдущего шага, и данные должны сохраняться до тех пор, пока последний из этих шагов не будет завершен или транзакция не будет отменена, и в этом случае должен быть откат для восстановления баланса вашего аккаунта это было до того, как вы проверили.

В большинстве случаев вы можете реализовать транзакции в обоих направлениях, но если вы будете использовать службы без состояния, ваше клиентское приложение должно будет заботиться о правильном порядке и выполнении задач, или вам придется найти другой способ правильно хранить информацию о транзакции и управлять откатами. Это было бы на стороне клиента, как вы его назвали.

Все это, однако, довольно общее, и безопасность и/или обработка сеанса должны быть рассмотрены в каждом из этих случаев. Вы можете очень хорошо использовать информацию сеанса для аутентификации вызовов службы без состояния - вам просто нужно будет аутентифицировать каждый вызов индивидуально, например, добавив идентификатор сеанса или идентификатор сеанса или другой токен безопасности в бизнес-данные.