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

Служба Java REST с использованием токена аутентификации

В моем веб-приложении с использованием Java EE 6. Я хочу показать некоторые из моих функций как службы Json Rest. Я хочу использовать токены аутентификации для входа в систему, Пользователь отправит свое имя пользователя, пароль, а сервер отправит обратно токен, который будет использоваться для авторизации пользователя по их дальнейшим запросам в течение определенного времени.

Несколько вопросов, беспокоящих меня до сих пор;

  • Когда сервер создает токен и отправляет его клиенту, должен ли сервер сохранять его в БД ИЛИ в Bean, используя что-то вроде хеш-таблицы в качестве пар идентификаторов пользователя?

  • Могу ли я получить некоторую помощь с использованием какого-либо конкретного API Java EE, или это должен быть весь пользовательский код?

4b9b3361

Ответ 1

Вот мой вход:

  • Я бы сохранил токен в БД, если вам нужно перезапустить сервер, вы не хотите терять все свои токены пользователя. Вы также можете сохранить его в памяти, а также ускорить запрос и посмотреть его только в БД, если он не найден в памяти.

  • Я бы принял токен в заголовке. Я бы поставил остальную службу на HTTPS, чтобы запрос был зашифрован, и вам не нужно беспокоиться о том, чтобы шифровать токен вручную в запросе

  • Я бы, наверное, посмотрел JAX-RS и посмотрел, какие функции он предлагает.

Ответ 2

Недавно я в блоге о том, как настроить авторизацию на основе ролей в API REST JAX-RS, используя как простой подход к токенам сеанса, так и более безопасный способ подписи запросов с использованием токена сеанса в качестве общего секрета.

Это сводится к:

  • Получить токен сеанса с сервера вместе с некоторым идентификатором для пользователя
  • Используйте токен для шифрования информации в запросе
  • Также используйте значение timestamp и nonce для предотвращения атак MITM.
  • Никогда не пропускайте токен сеанса назад и вперед, кроме случаев, когда он первоначально извлекается
  • У вас есть политика истечения срока действия токенов сеанса.

Ответ 3

Сохранение маркера в bean или хеш-таблице не будет постоянным. БД будет сохраняться между выполнением.

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

Я сделал аналогичные вещи, используя Spring Framework и Spring Безопасность. Эти вещи относительно просты, используя это. Чтобы написать собственный код, нужно изобрести колесо. Там много рамок, которые помогут вам. Однако тогда у вас будет кривая обучения структуры.