Tengo un sistema de inicio de sesión único que funciona de esta manera:
El usuario hace clic en el enlace en clientsite.com
que lo redirige a
mastersite.com?returnTo=http://clientsite.com
Si la autenticación es válida, el usuario se redirige a:
http://clientsite.com?token=xxxx
Como no quiero que http://clientsite.com
esté en una lista de sitios web autorizados, decidí hacer lo siguiente:
Todos los sitios del cliente comparten una clave aleatoria secreta común, como
client_token = "VDFdzbZ3qFvWyx5dUMdEDmwnS7T"
y haz lo siguiente:
time = time();
hash = hash_sha256(client_token + time + http://clientsite.com)
redirecto to : mastersite.com?returnTo=http://clientsite.com&time=time&key=hash
el sitio maestro luego verifique:
is time < time() - 10min ?
is hash_sha256(client_token + time + http://clientsite.com) == hash ?
¿Este esquema es lo suficientemente seguro?
El único problema que veo es si decido cambiar el client_key que necesito para actualizar muchos sitios web, ¿puedo superar esto?