REST-аутентификация и HMAC / закрытый ключ (когда мне его установить?)
последние пару дней я играл с простой идеей приложенияЯ пытаюсь научить себя основам аутентификации REST.
Пока ямы поняли, чтоЛучший способ сделать это с помощью реализации HMAC, как тот, который используется Amazon.
Моя самая большая проблема связана с тем, как именно я должен аутентифицировать пользователяа также дать им свой закрытый ключ, чтобы они могли начать подписывать HMAC? Я продолжаю читать, что закрытый ключ, используемый для подписи HMAC, не должен отправляться по проводамКогда-либо, но тогда как они вообще это получают?
Моя идея была примерно такой, но я не уверен, что это верно.
Таблица базы данных для пользователей:
users (simplified, this would probably be a private key per client app?)
id (their public key?)
username
password?
privatekey
Предполагая, что клиент HTML / JS предоставит пользователю традиционную страницу входа в систему, которая будет отправлена API-интерфейсу примерно так:
https://example.com/myapp/api/v1/authenticate.json
POST: username / password
Это вернет либо
404:User not found
200:{ "id" : , "privatekey": }
Затем клиент будет хранить этот ключ где-нибудь (будет ли локальное хранилище / cookie безопасным местом?) И использовать его для подписи дальнейших запросов, которые будут выглядеть следующим образом
GET https://example.com/myapp/api/v1/something/?key1=value1&publickey={theirID}&hmac={hmac signature of the request using their private key}
Затем сервер проверяет открытый ключ, извлекает соответствующий закрытый ключ и перестраивает подпись HMAC, если они совпадают, у нас есть запрос с проверкой подлинности, обрабатывающий его.
Я правильно понял? Я'Я не уверен, что понимаю роль личного ключа, если мне все еще нужен пароль, как в моем примере, поэтому что-то говорит мне, что я могу ошибаться.