Аутентификация отдыха с весенней безопасностью и mongodb
Я реализовал Spring
приложение с mongodb
и теперь я реализовал Rest-аутентификацию с помощью Spring security и Mongodb, и теперь мне нужно добавить Authorization
заголовок, и он показывает только данные из вызова API, если Authorization
все в порядке, теперь все в порядке, но мне интересно, как я могу получить это значение? Я имею в виду, что я хочу сделать Вход в приложение, у меня должна быть авторизация для этого? Если нет, то ответ при входе должен вернуть эту авторизацию, чтобы использовать ее в следующих вызовах? Я также читал о aws token
также из oauth2
, но я действительно хочу знать процесс, я имею в виду, в каком потоке обычный пользователь может войти в приложение и затем делать вызовы с авторизацией?
Мои платформы:
БД - MongoDB
Сервер - Весна
Веб - угловой
Приложение - Android
Это проект для игры-викторины, который может поддерживать мультиигровые варианты (более 1 игрока играют одновременно)
Так что мне нужно понять, что из APP / WEB мне нужно позвонить, скажем, api/v1/login, а затем отправить пользователя и пароль, хорошо, где часть, когда мне нужно создать bcrypted и salt-материал для его хранения? в дб? Нужно ли делать это в приложении, а затем отправлять, например, материал SHA через JSON при вызове входа в систему, или лучше отправить пароль на сервер, чтобы сервер делал все эти вещи и сохранял их на БД?
2 ответа
В описанном вами сценарии нет смысла использовать ни OpenID Connect, ни OAuth2. Существует единый сервер для аутентификации и ресурсов. Сценарий может быть примерно таким:
- Клиент (Angular или App) отправляет учетные данные на сервер в виде простого текста по защищенному HTTP-соединению для входа
- Сервер отвечает токеном доступа и обновления
- Оба токена должны быть сохранены на клиентском устройстве (например, Local Storage)
- Вы отправляете токен доступа вместе с каждым запросом, требующим аутентификации
- До истечения срока действия токена доступа вы запускаете определенный вызов REST, чтобы обновить токены, используя свой токен обновления.
- Сервер отправляет обратно новый доступ и новый токен обновления. Сохраните их и удалите старые.
Используя SpringBoot, вы получаете все это бесплатно. Если у вас нет конкретного примера, я бы не стал давать фрагменты кода. Вы найдете замечательные и краткие примеры на сайте auth0.
Найдите здесь англоязычное руководство по отправке токена доступа вместе с вашими запросами.
Что касается ваших вопросов о БД, простой, но правильный сценарий может заключаться в том, чтобы хранить (в БД) зашифрованный пароль вместе с вашим пользователем. Если пользователь входит в систему, он отправит вам простой текстовый пароль, который вам нужно зашифровать, и сравните его с тем, который вы сохранили. Никогда не храните простой текстовый пароль, просто используйте его для входа в систему. Есть несколько рекомендаций, которые вы можете рассмотреть, используя пароли в приложениях Java.
Я настоятельно рекомендую вам использовать токены Spring Security, OAuth2 и JWT для защиты вашего REST API. Поток следующий:
- пользователь может войти в приложение
- токен сгенерирован
- этот токен устанавливается в заголовке каждого запроса
Обычно токены имеют длительность. В основном OAuth2 определяет 2 объекта:
- Сервер авторизации: это лицо, ответственное за процесс авторизации. Он проверяет предоставленные учетные данные и, если все в порядке, генерирует токен
- Ресурсный сервер: это объект, который представит REST API. Этот объект будет проверять, присутствует ли токен в каждом запросе и является ли он токеном
Мо информация доступна здесь https://www.baeldung.com/spring-security-oauth-jwt
ОБНОВИТЬ
Здесь https://github.com/angeloimm/spring_oauth Я загрузил простой пример аутентификации OAuth JWT на основе Spring (а не Spring boot) на основе DB H2.
Вы можете скачать его и адаптировать к mongodb. Я думаю, что достаточно просто адаптировать его. К сожалению, это очень напряженный рабочий период для меня, и я не могу это сделать.
Надеюсь это полезно
Angelo