Autenticación REST y clave HMAC / privada (¿cuándo la configuro?)

He estado jugando con una idea de aplicación simple los últimos días mientras estoy tratando de enseñarme lo básico de la autenticación REST.

Hasta ahora he recogido que elmejor La forma de hacerlo es con una implementación de HMAC como la que usa Amazon.

Mi mayor preocupación es exactamente cómo se supone que debo autenticar al usuario.y ¿Darles su clave privada para que puedan comenzar a firmar el HMAC? Sigo leyendo que la clave privada utilizada para firmar el HMAC no debe enviarse por cablesiempre, pero entonces, ¿cómo lo consiguen en primer lugar?

Mi idea fue algo como esto, pero no estoy seguro de si esto es válido.

Tabla de base de datos para los usuarios:

users (simplified, this would probably be a private key per client app?)
  id (their public key?)
  username
  password?
  privatekey

Suponiendo que en un cliente HTML / JS, al usuario se le presentaría una página de inicio de sesión tradicional que POST a la API con algo como esto:

https://example.com/myapp/api/v1/authenticate.json
POST: username / password

Eso volvería tampoco

404:User not found
200:{ "id" : <id>, "privatekey": <privatekey> }

El cliente luego almacenaría esa clave en algún lugar (¿el almacenamiento / cookie local sería un lugar seguro?) Y la usaría para firmar otras solicitudes que se verían así

GET https://example.com/myapp/api/v1/something/?key1=value1&publickey={theirID}&hmac={hmac signature of the request using their private key}

El servidor luego verificará la clave pública, recuperará la clave privada asociada y reconstruirá la firma HMAC, si coinciden, tenemos un proceso de solicitud autenticado.

¿Estoy haciendo esto bien? No estoy seguro de entender el rol de una clave privada si todavía necesito una contraseña como en mi ejemplo, así que algo me dice que podría estar equivocado.

Respuestas a la pregunta(1)

Su respuesta a la pregunta