Actualmente estoy desarrollando una aplicación web que servirá datos a clientes de iPhone. Para ser el propietario de los datos, no quiero que otros clientes puedan obtenerlos.
Pensé que podría usar una clave secreta compartida entre el servidor y los clientes: una cadena codificada que incluiría la marca de tiempo para garantizar que uno de mis clientes haya realizado la solicitud. Entonces la solicitud se vería así:
http://domain.com/request/[desired_object_id]/[device_id]/[timestamp]/[hash]
Calcularía el hash como este en la aplicación:
hash = sha(desired_object_id + device_id + timetsamp + "mysecretkey")
Y en el lado del servidor, me aseguraré de que el hash se haya generado correctamente antes de enviar los datos. (todos los objetos identificados por "desired_object_id" están disponibles para todos los suscriptores). Como alternativa, también podría generar una clave aleatoria en lugar de una marca de tiempo.
El problema es que no me suena seguro ... Los datos no son críticos, es solo que no quiero ofrecer una API pública utilizada por no suscriptores. Y hacer esto también me impediría cambiar la clave secreta, porque esto obligaría a los usuarios a actualizar a una nueva versión del cliente (no es muy bueno para el negocio ...)
¿Hay algún otro problema conocido con esto? Hay una mejor manera de hacerlo ? Preferiblemente con la misma simplicidad.