Реализация базовой авторизации без spring security

Существует некоторое задание:

Запрос предназначен для авторизации у провайдера стороннего ПО. В дальнейшем провайдер обслуживает запросы только от авторизованного ПО. Стороннее ПО должно использовать для авторизации логин и пароль, полученные от администратора системы:

Запрос:
GET http://ip:port/provider/auth?login=<login>
Параметры:
● login – логин зарегистрированного в провайдере пользователя.
Ответ:
● Если провайдеру известен указанный логин
HTTP 200
Response body
{
“salt”:“abracadabra”
}
● Если провайдеру неизвестен указанный логин
HTTP 401 Unauthorized
Пример:
Дляслучаяlogin=IamISS; password=Gmost
Request:
http://192.168.0.250:80/provider/auth?login=IamISS
Response:
HTTP 200 OK
{
“salt”:”y67Ve4”
}
Далее стороннее ПО должно проделать следующую процедуру:
auto pass = std::to_string(crc32(”y67Ve4” + “Gormost”));
и сохранить значение pass(“4988EBF2”) для использования в других запросах. Значение
passдолжно передаваться в поле Authorizationзаголовка в base64 кодировке.
Authorization: Basic NDk4OEVCRjI=
Все описанные далее запросы анализируют поле Authorization в заголовке

Как реализовать данную функцию проверки пароля без использования spring security? Помогите, пожалуйста, составить план действий. Как сравнивать пароль?


Ответы (1 шт):

Автор решения: S.H.

Я прошу прощения, но при чём здесь вообще spring security?

И второе важное уточнение: мы на чьей стороне играем? Надо реализовать клиенскую или серверную сторону?

Если клиентскую - то вся схема описана:

первым запросом шарашим провайдеру логин, в ответ - при действующем логине - получаем от него соль.

Солим свой пароль (путём сложения строк) и считаем от строки crc32.

Потом переводим полкучившееся значение в Base64

И начинаем его добавлять, видимо, ко всем запросам, требующим авторизацию.

И при этом я Вам пересказал своими словами ровно то, что написано в вопросе.

А в каком месте у Вас возникают сложности в реализации этой схемы?

Если серверную - то мы зная пароль делаем всё то же самое, что и клиент, и сравниваем свой результат и пришежший от клиента результат. Если они совпали - можно хлопвть в ладоши, пароль правильный!

( * А теперь вопрос со звёздочкой. я схему понимаю, но не понимаю, как провайдер, не зная моего пароля - ведь хороший провайдер не знает пароля, а знает толко хеш от него - будет эту авторизацию проверять? )

→ Ссылка