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, если они совпадают, у нас есть запрос с проверкой подлинности, обрабатывающий его.

Я правильно понял? Я'Я не уверен, что понимаю роль личного ключа, если мне все еще нужен пароль, как в моем примере, поэтому что-то говорит мне, что я могу ошибаться.

Ответы на вопрос(1)

Ваш ответ на вопрос