Estoy creando un servicio web que solo debe ser accesible para las aplicaciones de iOS. En el futuro, quiero expandirme a un sitio web móvil para que mi servicio también esté disponible para otros sistemas operativos móviles.
Ahora, tengo todo trabajando a través de una API. mis usuarios pueden registrarse, buscar compañías, ordenar productos de esas compañías y rastrear sus pedidos. Aún no está activo, pero está funcionando ...
Estoy enfrentando un problema importante: ¿cómo asegurar esto?
Durante los últimos días he dejado de programar y siempre he estado ocupado buscando en la web, StackOverflow y Seguridad de la información para saber cómo hacer esto. Descubrí que la forma en que Amazon asegura su API sería la mejor solución para mí. La manera en que Amazon asegura su servicio se explica aquí . Lo he ajustado un poco para mi servicio:
- El usuario se registra y obtiene la clave privada de la API + la clave pública (identificación)
- El usuario ingresa las credenciales y pulsa "iniciar sesión". La aplicación crea un hash de las variables + clave privada. La aplicación envía variables + marca de tiempo + hash + clave pública a API
- La API busca la clave pública en la base de datos, encuentra la clave privada que pertenece a esa clave pública (si la clave pública es válida). La API crea el hash de la misma manera que la aplicación. Si los hashes son los mismos, se ejecuta la solicitud (inicie sesión en este caso).
Esta forma de asegurar un servicio tiene sentido para mí, y puedo codificar la mayor parte del mismo. pero tengo un problema importante y no puedo encontrarle ninguna solución:
- El usuario obtiene un mensaje público & Clave de API privada cuando se crea una cuenta. La clave pública se puede enviar desde el servidor al dispositivo del usuario, ya que no es necesariamente un secreto. Dado que la clave de la API privada puede nunca
enviarse por cable, cómo puedo asegurarme de que una cuenta registrada en el dispositivo de un usuario conozca la API privada clave que se crea en el servidor?
¿Alguien sabe cómo resolver este problema? Cualquier ayuda sería muy apreciada !!