En detalle, aquí está el problema:
Estoy creando una aplicación para Android, que consume mi API REST en el back-end. Necesito crear una API de registro e inicio de sesión para empezar. Después de buscar con Google por un tiempo, siento que solo hay dos enfoques que puedo tomar.
- Durante el registro, uso enlace y obtengo las credenciales del usuario; guárdelo en mi base de datos contra el nombre de usuario (lado del servidor). Durante el inicio de sesión, otra vez uso enlace y pido las credenciales del usuario; verifique la contraseña con hash en la base de datos y devuélvale un ID de sesión, que planeo no caducar nunca a menos que cierre la sesión. Además, cualquier otra llamada a la API (GET / POST) que realice el usuario, se acompañará con este ID de sesión para que pueda verificar al usuario.
Pero en el enfoque anterior, estoy obligado a usar enlace para cualquier llamada a la API, de lo contrario, soy vulnerable a Man in The Middle Attack , es decir, si alguien huele mi ID de sesión, puede reconstruir las solicitudes GET / POST similares que no quisiera. ¿Tengo razón con la suposición anterior?
- La segunda opción es seguir la ruta de Amazon Web Services , donde uso la autenticación de clave pública / privada. Cuando un usuario se registra, utilizo una API enlace para guardar sus credenciales en la base de datos. A partir de entonces, uso la contraseña del usuario como clave privada. Cualquier otra llamada a la API que el usuario haga tendrá un bloc con hash de la URL de solicitud utilizando la clave privada del usuario. En el lado del servidor, reconstruyo el hash usando la clave privada guardada. Si el hash es una coincidencia, dejo que el usuario haga su tarea; En esta opción, necesito usar enlace solo para la API de registro. El REST puede continuar en enlace .
Pero aquí la desventaja es que me veo obligado a alojar mi API de registro en un directorio virtual separado (estoy usando IIS y no estoy seguro de poder alojar las API http y https en el mismo directorio virtual ). Por lo tanto, me veo obligado a desarrollar la API de registro en un archivo de proyecto separado. De nuevo, ¿estoy en lo cierto con el supuesto anterior?
Editar: Estoy usando ASP.NET MVC4 para crear la API web.
La razón por la que me resisto a usar enlace para todas mis llamadas a la API REST es que siento que no es liviano y crea más carga útil de la red, lo que puede no serlo. más adecuado para una aplicación móvil. Más cifrado / descifrado y un saludo adicional requerido pueden afectar aún más la duración de la batería de un móvil. ¿O no es significativo?
¿Cuál de los dos enfoques anteriores sugeriría?
PS: Fuimos con Https a todas partes, y fue la mejor decisión. Más de eso en mi blog .