Мне нужно аутентифицировать пользователей с помощью ключа API, но прежде чем передать его им, мне, очевидно, нужно проверить их учетные данные. Я думаю, что процесс должен идти так:
клиент->сервер: GET /user?username=fred
сервер-> клиент: nonce=XYXY
клиент-> сервер: POST /login?hashval={хэш(имя пользователя + пароль + одноразовый номер)}&nonce=XYXY&username=fred
сервер сравнивает результат hash(username + passwordFromDB + nonce) с hashval и отвечает API-ключом, если он равен
Но если бы кто-то прослушивал соединение, хотя он не смог бы напрямую узнать пароль моего пользователя, поскольку он уже знает имя пользователя и одноразовый номер, если бы пароль был достаточно простым, посредник мог бы чтобы сопоставить мой хэш, попробовав все общие возможные значения для пароля. (атака грубой силы)
Я знаю, что подключение через HTTPS и надежный пароль сделают этот процесс безопасным, но есть ли другие рекомендации или способы сделать этот процесс более безопасным?
Спасибо