Potresti prendere in considerazione la distribuzione del tuo ambiente SSO (avviso che non ho detto di "eseguire il rollover").
Uno dei miei contributi personali è il servizio di autenticazione centrale di Jasig ( link ) che funge da piattaforma di autenticazione centralizzata per i tuoi utenti per accedere a. Le tue applicazioni "client" dovrebbero quindi essere "CAS-ified" (integrate) con CAS in modo che autorizzi l'accesso dell'utente se sono già state autenticate da questo software di terze parti.
Per quanto riguarda la tua domanda, il componente a cui ho contribuito è stata la loro estensione ClearPass ( qui ) che, pur aumentando rischio di sicurezza come in qualsiasi applicazione che utilizza la crittografia per l'hashing, consente di proxy per credenziali di testo non crittografato ( qui ).
Purpose (ClearPass): To enable single sign-on into some legacy application it may be necessary to provide them with the actual cleartext password. While such approach inevitably increases security risk, a number of institutions found it to be a "necessary evil".
Dopo aver completato con successo la transazione ClearPass, si finisce con il login e la password dell'utente. Si noti che queste sarebbero le credenziali di accesso dell'applicazione dell'utente; ciò che l'utente utilizza per accedere alla tua applicazione che gestisce l'autenticazione per i servizi di posta elettronica di terze parti per loro .
Le credenziali di accesso in mano, è possibile richiedere nuovamente la password dell'applicazione tramite ClearPass più e più volte per decrittografare le password di servizio su richiesta che sono state crittografate originariamente con la loro password di accesso in modo da risolvere i problemi di "Password Manager" descritti da @executifs. L'archiviazione della password dell'applicazione dell'utente viene gestita da ClearPass, crittografata da EncryptedMapDecorator e archiviata in memoria (o in memcached, ecc.).
Per inciso, ecco una breve pagina wiki sull'implementazione crittografica Ho scritto non molto tempo fa quando lavoravo con la crittografia e ClearPass (e sì, è stato sottoposto a ## crypto su Freenode per la critica di massa e revisionato in base alle esigenze) nel caso in cui fosse utile.
Per il codice attuale, ecco alcuni esempi in Java , Nodo. e sì, anche C # . Si noti che le ultime due sono essenzialmente le mie porte di EncryptedMapDecorator.java
rispetto alla derivazione della chiave basata sulla password (derivante una chiave segreta basata sulla passphrase), il vettore di inizializzazione (byte casuali protetti) e persino l'imballaggio. Dopo aver studiato le risorse che ho delineato qui e questi esempi di codice, dovresti avere abbastanza conoscenze per essere in grado di portarlo su PHP, o almeno iniziare comunque:)
Spero che questo aiuti!