Así que estoy trabajando en una aplicación móvil ahora mismo que hará solicitudes a una API REST construida con Django.¿Cómo comparto la clave secreta de mi aplicación móvil con el servidor la primera vez que la genero?
Para asegurar la API, planeo usar un sistema de autenticación de par de claves privadas/públicas.
El flujo de trabajo que he pensado es algo como esto:
- El usuario inicia sesión en el uso de Facebook
- Una vez que el usuario firma la aplicación genera una clave
- La clave privada privada es compartida entre el servidor y la aplicación para que el servidor sepa asignar esa clave privada a un usuario específico.
- Cada vez que la aplicación móvil realiza una solicitud, la aplicación genera una HMAC/firma utilizando los parámetros de solicitud y la clave privada. Además del HMAC, la aplicación también envía el user_id del usuario que lo envió (esto actuará como la clave pública).
- Cuando el servidor recibe la solicitud, genera su propio HMAC. Toma el user_id y busca la clave privada en una tabla. Al usar la clave privada, recrea el HMAC con los parámetros de solicitud y lo compara con el HMAC que envió la aplicación móvil. Si el servidor y el móvil tienen HMAC coincidentes, entonces realiza la solicitud.
Ahora mi problema se encuentra en el paso 3, donde la clave privada debe compartirse de alguna manera entre la aplicación móvil y el servidor. ¿Cómo puedo enviar de forma segura la clave privada?