Stiamo lavorando a un'implementazione SSO che verrebbe utilizzata su domini. Mi rendo conto che ci sono modelli funzionanti collaudati come CAS per questo, ma sto giocando con un approccio diverso e voglio ricevere feedback da tutti voi qui per vedere se questo è sicuro o meno. La premessa di base è che non vogliamo utilizzare i reindirizzamenti se non è necessario e vogliamo che i siti dei prodotti siano in grado di personalizzare le proprie pagine di accesso. Si rivolge solo a IE8 + e ai moderni FF e webkit. Quindi, senza ulteriori indugi l'implementazione:
- Il client accede al sito del prodotto A.com. Non hanno un cookie di sessione per a.com, quindi il sito avvia lo script dell'autore genitore.
- Lo script padre crea un iframe che carica una pagina dal server di autenticazione su auth.com. Auth.com convalida la richiesta in base all'intestazione del referer e, se il referer non è affidabile, risponde con x-frame-options: DENY e / o reindirizzamento del frame.
- Lo script su questa pagina (lo script con cornice) fa una richiesta ajax al server di auth.com che richiede un token di tempo SSO 1 (1TT).
- Il client non ha un cookie auth.com quindi questo è rifiutato, e lo script iframe dice allo script genitore di compilare un modulo di autenticazione usando window.postMessage (e lo script genitore convalida l'origine) per comunicare poiché è cross domain.
- L'utente inserisce le proprie credenziali e invia invia.
- Le credenziali vengono passate dallo script padre allo script framed tramite postMessage nuovamente, e lo script con frame le usa per accedere a auth.com, ricevendo sia un cookie auth.com che un 1TT.
- L'1TT è passato allo script genitore.
- Lo script genitore passa il 1TT al server di A.com.
- A.com utilizza l'1TT per ottenere le informazioni dell'utente dal server di auth.com tramite un'API interna privata e auth.com invalida l'1TT in modo che non possa essere riutilizzato.
-
A.com restituisce un cookie di sessione per A.com al client e ora il client esegue la sua attività su A.com.
-
Quindi il client passa a B.com, ma ancora non ha cookie di sessione per B.com. Lo script genitore viene eseguito nuovamente, il che crea un iframe che punta nuovamente a auth.com. Lo script iframe richiede un 1TT da auth.com e dal momento che ha un cookie di sessione per auth.com questa volta ne ottiene uno.
- L'1TT viene passato dallo script iframe allo script padre al server di B.com che lo utilizza per ottenere l'utente da auth.com e rilasciare un cookie di sessione per B.com.
La mia preoccupazione principale è al punto 2. È un modo solido per prevenire l'inquadramento dannoso? Quali altre vulnerabilità di sicurezza sono suscettibili a questo?
Modifica: tutti i siti e gli script verranno caricati HTTPS.