Клиент попросил нас разработать простое решение для единой регистрации для своих поставщиков.В этой ситуации у клиента есть много поставщиков с возможностями реализовать простое решение, которое позволяет пользователям поставщиков входить на сайт нашего клиента.Я придумал это:
Общие данные
Следующие данные будут переданы нам и указанному поставщику.
- user_id - Предоставлено поставщиком
- vendor_id - Предоставлено нами
- vendor_secret - Предоставлено нами.«Случайный» хэш SHA512
Функция общего хеширования
Наша спецификация будет определять следующую практику для создания ключа, который подходит для передачи через URLпараметры:
// Pseudo-code. Assume sha512() is a function in their native language that accepts a string and returns a SHA-512 hash
vendor_id = 341;
vendor_secret = "areallylonghash...";
user_id = "12345abcdef;&";
hash = sha512(vendor_id + ":" + vendor_secret + ":" + user_id);
SSO Process
- Пользователь нажимает кнопку «войти» на сайте поставщика, и в точку входа SSO поставщика выдается запрос GET.
- Поставщик получает запрос на точку входа (например, www.avendor.com/sign_in).
- Поставщик использует вышеуказанную функцию хеширования для генерации хеша для пользователя.
- Продавец перенаправляет наконечная точка нашего клиента с параметрами
vendor_id
, user_id
и hash
. - Мы получаем запрос в нашей конечной точке.Мы ищем vendor_secret из переданного vendor_id и пытаемся воссоздать
hash
, которое было отправлено нам. - Если сгенерированный хеш совпадает, создайте сеанс на сайте клиента.
Потенциальные проблемы
Если мы используем запрос GET для шага 4 перенаправления, возможно ли, что сгенерированный хеш может оказаться в истории браузера пользователя?Не очень безопасно, если кто-то может просто нажать на ссылку в истории.Можем ли мы использовать HTTP-заголовки для передачи хэша при перенаправлении?
Если вы дошли до этого места, спасибо.Все отзывы приветствуются!Мы хотим убедиться, что мы внедряем безопасное решение.