Защита веб-службы REST с использованием токена (Java)

Этот вопрос каким-то образом связан с нижеуказанным связанным вопросом. Однако мне нужно немного больше ясности по некоторым аспектам и некоторой дополнительной информации. См:Реализация токена аутентификации веб-службы REST

Фон:

Мне нужно реализовать безопасность для веб-службы REST с использованием токенаВеб-сервис предназначен для использования с клиентом Java. Следовательно, проверка подлинности формы и всплывающие окна для учетных данных бесполезны.Я новичок в безопасности и шифровании REST

Вот что я понял до сих пор:

Для первого запроса:

Пользователь устанавливает соединение https (или контейнер обеспечивает https, используя 301)Пользователь отправляет имя пользователя и пароль для входа в службуЕсли учетные данные действительны, мы:Создать случайный временный токенСохраните случайный токен на сервере, сопоставив его с реальным именем пользователяЗашифруйте токен с помощью симметричного ключа, известного только серверуХешировать зашифрованный токенОтправьте зашифрованный токен и хэш клиенту

Для последующих запросов:

Клиент отправляет эту зашифрованную комбинацию токена и хэша (используя поле username basic?)Мы проверяем, чтобы зашифрованный токен не был изменен с помощью хеша, а затем расшифровываем егоМы проверяем расшифрованный токен в таблице отслеживания сеанса на наличие записи с истекшим сроком действия и получаем фактическое имя пользователя (срок действия которого будет управляться кодом?)Если имя пользователя найдено на основе разрешенных ролей, разрешенные операции настраиваются

Больше деталей:

Так как клиент является клиентом Java, первым запросом может быть POST, содержащий учетные данные. Тем не менее, похоже, что он может предоставить учетные данные до того, как будет установлен https. Следовательно, должен быть фиктивный GET для защищенного ресурса, чтобы сначала установить https?Предполагая, что выше требуется, второй запрос представляет собой LoginAction POST с учетными данными. Этот запрос обрабатывается вручную (без использования авторизации контейнера). Это правильно?Вышеуказанный LoginAction возвращает пользователю комбинацию зашифрованного токена + хешПользователь устанавливает его в заголовок, который используется механизмом аутентификации BASIC (поле username)Мы реализуем JAASRealm для расшифровки и проверки токена и нахождения разрешенных ролейОб остальной части процесса авторизации заботится контейнер с набором WebResourceCollection, определенным в файле web.xml.

Это правильный подход?