Podría considerar la implementación de su propio entorno de SSO (aviso que no dije para "rodar el suyo").
Uno a quien he contribuido personalmente es el Servicio de Autenticación Central de Jasig ( enlace ) que sirve como plataforma de autenticación centralizada para sus usuarios. para iniciar sesión en. Entonces, sus aplicaciones "cliente" deberían estar "CASeadas" (integradas) con CAS para que autorice el acceso del usuario si ya ha sido autenticado por este software de terceros.
En relación con su pregunta, el componente al que contribuí fue su extensión ClearPass ( aquí ) que, mientras aumenta El riesgo de seguridad, como en cualquier aplicación que utiliza el cifrado sobre hash, le permite obtener credenciales de texto claro ( aquí ).
Propósito (ClearPass) : para habilitar el inicio de sesión único en alguna aplicación heredada, puede ser necesario proporcionarles la contraseña de texto simple. Si bien este enfoque aumenta inevitablemente el riesgo de seguridad, varias instituciones consideraron que es un "mal necesario".
Al completar con éxito la transacción ClearPass, terminará con el nombre de usuario y la contraseña del usuario. Tenga en cuenta que estas serían las credenciales de inicio de sesión de la aplicación del usuario; lo que el usuario utiliza para iniciar sesión en su aplicación que maneja la autenticación a servicios de correo electrónico de terceros en su nombre .
Con las credenciales de inicio de sesión en mano, puede volver a solicitar la contraseña de su aplicación a través de ClearPass una y otra vez para descifrar las contraseñas de servicio a pedido que originalmente cifró con su contraseña de inicio de sesión para solucionar los problemas del "Administrador de contraseñas" descritos por @executifs. El almacenamiento de la contraseña de la aplicación del usuario es manejado por ClearPass, encriptado por EncryptedMapDecorator y almacenado en la memoria (o en memcached, etc.).
Como nota al margen, aquí hay una página wiki rápida sobre la implementación de crypto No hace mucho tiempo, cuando estaba trabajando con encriptación y ClearPass (y sí, se ha enviado a ## crypto en Freenode para criticarlo en masa y revisado según sea necesario) en caso de que ayude.
Para el código real, aquí hay algunos ejemplos en Java , Node. , y sí, incluso C # . Tenga en cuenta que los dos últimos son esencialmente mis puertos de EncryptedMapDecorator.java
con respecto a la Derivación de clave basada en contraseña (derivando una clave secreta basada en su frase de contraseña), Vector de inicialización (bytes aleatorios seguros) e incluso empaquetado. Después de estudiar los recursos que he descrito aquí, y estos ejemplos de código, debe tener los conocimientos suficientes para poder trasladar esto a PHP, o al menos comenzar de todos modos :)
Espero que algo de esto ayude!