2015-06-22 14 views
6

Se si dispone di un singolo server con più domini, qual è il metodo preferito per l'implementazione di una soluzione single sign sullo stesso dominio. Attualmente sto usando Devise, ho qualche milione di cookie in posto su domini separati, e sono bloccato. Oltre all'implementazione di SSO, devo anche migrare i vari cookie in un dominio centrale. Per quanto riguarda i vari server, hanno solo una pagina singola che mi obbliga a mostrare diversi stati a seconda se l'utente è connesso aSingle sign-on, più domini sullo stesso server, ruby ​​on rails

Ho provato quanto segue:.

  1. CORS: sceglierne uno dominio come hub di autenticazione centrale. Da tutti gli altri domini fai controlli incrociati per vedere se l'utente ha effettuato il login. Per la migrazione dei cookie, rileva se c'è un oggetto "current_user", lo invia al client, crea una richiesta CORS, firma l'utente e uccide il token. Funziona alla grande! MA ... Dopo averlo costruito per 2-3 settimane, è COMPLETAMENTE SBAGLIATO in IE. Anche IE11, sto notando che l'impostazione predefinita sta disabilitando questo comportamento.

  2. provato ad armeggiare con il negozio di sessione a

    Rails.application.config.session_store 
    

senza fortuna.

Attualmente sto sperimentando con il seguente:

  1. JSONP: Ho qualcuno in questo momento cercando di convertire il sopra per JSONP invece mentre cerco alcune altre opzioni:

  2. Configurare un provider OAUTH personalizzato. Come prima, sarà il "dominio centrale" se la persona è registrata, tornare al dominio richiesto con un token dal quale gli utenti possono effettuare richieste. https://github.com/songkick/oauth2-provider

  3. Guardare questo ma sembra obsoleto? https://github.com/rubycas/rubycas-client. Ho anche avuto la sensazione che questa sarebbe stata una soluzione se l'avessi tirata fuori dall'inizio, ma visto quanto siamo lontani dal progetto, non mi è chiaro come trasferirei i cookie esistenti. Inoltre non è chiaro se questo richiede due applicazioni per me di alzarsi e correre (uno per il client (s), uno per il server di autenticazione)

Come ho passare attraverso ciascuna di queste possibilità, se qualcuno ha avuto alcuna esperienza facendo quello che sto facendo, per favore informami e risparmia un sacco di lavoro :)

+1

OAuth è probabilmente il modo "giusto" per fare questo. Ti suggerirei di concentrare i tuoi sforzi lì. –

risposta

1

Il modo migliore a meno che non si tratti di un'app giocattolo è probabilmente quello di creare un provider oauth.

Usiamo Doorkeeper con Devise per questo e funziona benissimo. Varrà la pena dedicare un po 'di tempo a leggere la documentazione e assistere a una chiacchierata su youtube se non hai già familiarità con la strategia, ma una volta che hai compreso i concetti base è abbastanza semplice da configurare con l'aiuto di questa gemma.

C'è un breve video di corsa verso il basso sul http://railscasts.com/episodes/353-oauth-with-doorkeeper