Я начинаю новый проект, в котором мы планируем построить спокойный задний конец и конец шрифта AJAX. Я приближаюсь к проблеме, сосредотачиваясь на Идентификации всех ресурсов, которые у меня есть, и на то, что будут выполнять их различные HTTP-глаголы, их URI и JSON-представления этих ресурсов.
Я ищу лучший дизайн для защиты бэкэнда. Вот список проектов, которые я рассмотрел. Я ищу альтернативные проекты, не перечисленные ниже, а также плюсы и минусы рекомендаций. Система будет реализована с помощью Spring 3.0 и, возможно, Spring Security 3.0, SSL будет использоваться для многих частей системы, но не для всех из них, поэтому некоторые запросы могут появляться на SSL, а некоторые - нет.
Вариант 1: использование сеанса HTTP
Покажите стандартный экран входа в систему, создайте сеанс на стороне сервера и дайте tomcat отправить обратно файл cookie jsessionid, и чтобы клиент ajax включал cookie JSESSIONID в каждом запросе XHR. Эти варианты просто чувствуют, что это неправильный подход по следующим причинам.
- Соединение становится statefull, которое противоречит правилам REST
- Я хочу, чтобы иметь возможность разбивать бакенд на несколько отдельных файлов WAR, что означает, что я могу иметь несколько HTTP-сессий на бэкэнд, если это так, тогда этот подход не работает. Хотя мне не нужна возможность разделить сервер на несколько приложений сегодня, я бы предпочел дизайн, который позволяет эту возможность.
Вариант 2. Найдите библиотеку безопасности на основе Java с открытым исходным кодом, которая делает это
Помимо безопасности Spring я не нашел других библиотек Java, любые рекомендации заслуживают высокой оценки.
Вариант 3. Попробуйте использовать существующий протокол, например OAuth
В моем очень кратком обзоре OAuth кажется, что он предназначен для аутентификации на сайтах, где каждый сайт имеет собственную пользовательскую базу данных. В этой системе я хочу, чтобы глобальная пользовательская база данных была разделена на все бэкэнд-услуги ajax.
Вариант 4: Использовать SAML и Shiboleth
Эти параметры кажутся более убитыми и чрезвычайно сложными для настройки и обслуживания.
Вариант 5: Отправить имя пользователя и пароль с каждым запросом
Для этого требуется, чтобы пользователь отправил свое имя пользователя и пароль с каждым запросом, а это означает, что приложение AJAX на передней панели должно хранить имя пользователя и пароль как объект JavaScript, а если пользователь переходит от страницы, то обратно комманда имени пользователя/пароля, и пользователь может быть вынужден снова войти в систему. Я не хочу, чтобы передняя часть попыталась поместить имя пользователя и пароль в файл cookie, поскольку это будет включать безопасность.
Вариант 6: Внедрить собственный протокол аутентификации/авторизации
Создайте службу REST, чтобы пользователи могли представить комбинацию имени пользователя и пароля, а затем вернуться и токен безопасности, который они должны отправить обратно службе с каждым запросом. Ток безопасности будет подписан цифровой подписью службой и будет иметь время истечения срока действия. Токен будет полезен только для большинства операций. Операции с высокой степенью безопасности потребуют нового экрана входа в качестве порта для подтверждения операции.
Проблема с этим подходом заключается в том, что я должен изобрести еще один протокол безопасности, который кажется пустой потерей времени.
Я уверен, что я не единственный человек против этой проблемы, я надеюсь, что сообщество может указать на некоторые параметры и инструменты, которые я еще не нашел.