Autenticación se trata de reconocer de manera confiable quién está en el otro extremo. Ya que, desde el servidor, usted "ve" al cliente solo a través de paquetes de red, y dado que todos pueden comprar el mismo tipo de hardware, es posible que desee autenticar correctamente a un cliente específico solo si ese cliente es capaz de computar cosas que otros sistemas podrían no. Esto implica que el cliente debe saber algo de "secreto". No hay forma de evitarlo. Si no se puede almacenar un secreto del lado del cliente, la autenticación desde el servidor es inútil.
Ahora, sucede que en el caso de un teléfono, el sistema cliente viene con un apéndice generalmente designado como "humano". Existe una relación de uno a uno (sin mantenimiento) entre un teléfono y su propietario. Esto significa, en su contexto, que el secreto del lado del cliente puede almacenarse en el propio dispositivo, pero también en el cerebro del usuario humano. Llamamos a eso, técnicamente, una "contraseña".
Alternativamente, hay un valor secreto almacenado de manera confiable almacenado en el lado del teléfono: es la clave en la tarjeta SIM. Ese secreto específico es lo que usan las compañías telefónicas para distinguir los teléfonos entre sí, y toda la facturación se basa en ello. Usted podría ser capaz de aprovechar esa autenticación, pero solo mediante la integración con las compañías telefónicas; usted no hace eso con un simple "servidor en Internet". Una implementación práctica sería la siguiente:
- La aplicación del cliente se conecta a su servidor (con algún protocolo apropiado, generalmente SSL / TLS).
- El servidor envía un SMS al usuario, que contiene un código numérico aleatorio.
- El usuario lee el SMS y escribe el código en la aplicación.
- La aplicación envía el código al servidor.
- El servidor ve que el código enviado desde la aplicación coincide con el que acaba de enviar por SMS y está contento.