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