Абсолютно новый для бэкэнда, сессий и криптографии. Поэтому я спрашиваю здесь, что было бы правильным способом идентификации пользователей для веб-приложения.
Вот история:
Я разрабатываю приложение для платформы электронной коммерции Shopify. Когда продавец первоначально получает доступ к приложению, Shopify отправляет в приложение подтверждение hmac. При проверке авторизации Shopify hmac проверяет приложение, хранит cookie-файл «shopname» и отправляет страницу приложения в ответ.
Дело в том, что когда продавец следует по другим маршрутам приложения, нет никаких способов проверить, действительно ли он является тем, кем он является. Единственное информационное приложение, имеющееся на этих маршрутах, - cookie-файл «shopname». Я придумал несколько случайных значений хеша для идентификации продавцов. Что я делаю, так это создаю hmac (как cookie «app-token») из случайных значений и сохраняю их и дату создания в БД под значением «shopname».
Когда маршрут получает запрос, приложение считывает cookie-файлы «shopname» и «app-token» и запрашивает в БД сохраненные значения. Затем проверяет, прошло ли не более 1 дня с момента создания 'app-token', создает hmac из этих значений и проверяет cookie 'app-token' на равенство. Если прошло более 1 дня, продавец перенаправляется на маршрут авторизации Shopify hmac, а новый hmac cookie «app-token» генерируется и сохраняется в БД (это единственное место, где он генерируется).
Вот как сейчас выглядит «app-token»:
var random_num = Math.random().toString();
var auth_hash = crypto.createHash('md5').update(random_num).digest('base64');
var auth_hmac_random_num = Math.random().toString();
var auth_hmac = crypto.createHmac('sha256',auth_hash).update(auth_hmac_random_num).digest('hex');
var auth_hmac_concant_random_num = Math.random().toString();
var auth_hmac_concat = crypto.createHash('md5').update(auth_hmac_concant_random_num).digest('hex');
var auth_hmac = auth_hmac_concat + auth_hmac;
auth_hash, auth_hmac_random_num, auth_hmac_concat хранятся в БД под значением «shopname» как JSON.
По запросу проверки auth_hmac_concat удаляется из cookie «app-token», а hmac создается из auth_hash и auth_hmac_random_num и проверяется на «app-token» с помощью crypto.timingSafeEqual(hmac, app_token)
.
Опять же, я совершенно новичок в бэкенде, и я мог бы слишком усложнять или упрощать вещи. Вопрос в том, что было бы правильным способом идентифицировать торговцев в описанных обстоятельствах? Надеюсь, я был достаточно ясен.