Как обезопасить веб-сервисы Java с помощью входа в систему и обработки сеанса
-
23-09-2019 - |
Вопрос
Я бы хотел защитить свой веб-сервис (Java metro) с помощью логина.
Вот как я планирую это сделать:
Шаги, необходимые при вызове метода webservice, следующие:
- вызовите login (user, pwd), получите токен сеанса 1.1 запомните токен
- вызовите servicemethod (токен, arg1, arg2...)
- веб-сервис проверяет, известен ли токен, если не генерирует исключение, в противном случае продолжайте
- выход из системы или тайм-аут после x периодов бездействия
мои вопросы:1.каково ваше мнение о таком подходе?есть ли в этом смысл?2.существуют ли какие-либо библиотеки, которые берут на себя бремя написания обработки сеанса (возможно, с сохранением базы данных, чтобы пережить перезапуск приложения)
(решение должно быть простым и легко использоваться с клиентами Java и .NET)
Спасибо!
Решение
Это возможно, и я видел веб-сервисы, использующие аналогичный подход.Но я бы не стал внедрять свое собственное решение.Вместо этого я бы использовал токен безопасности из спецификации WS-Security и, точнее, токен имени пользователя (вы получите это из ВСИТ который является частью Metro и, таким образом, совместим с .СЕТЕВЫЕ клиенты).Взгляните на эта статья для ознакомления.
Обновить: Еще несколько указателей:
Реализация профиля WS-Security UsernameToken для веб-служб на базе Metro- Что нового в усовершенствованиях веб-сервисов (WSE) 3.0
- Аутентификация веб-сервиса с помощью UsernameToken в WSE 3.0
- Реализация прямой аутентификации с помощью UsernameToken в WSE 3.0
Я не могу сказать, что я нашел WS-Security очень удобным, но, тем не менее, мой опыт показывает, что использование WS-Security занимает меньше времени, чем внедрение пользовательского решения, более безопасно и лучше масштабируется (проверка базы данных при каждом вызове требует затрат).
Редактировать:
Исправил первые две ссылки, потому что они были мертвы.Не смог найти ни одного для третьего, но я думаю, что второй должен охватить это.
Другие советы
Не начинайте сразу же внедрять это самостоятельно с нуля.Многие контейнеры J2EE / Java-фреймворки предлагают поддержку входа в систему / контроля доступа.Взгляните на документацию к фреймворку, который вы используете в данный момент.
Другой простой альтернативой является реализация контроля доступа на интерфейсном веб-сервере;например ,Apache HTTPD действует как обратный прокси-сервер для Tomcat.
Я подумывал о том, чтобы попробовать себя Апач Широ, Я действительно не могу сказать, хорошо ли это.Хотя выглядит неплохо.