Ho diversi siti in diversi ambiti: example.com
, example.org
, mail.example.com
e passport.example.org
. Tutti i siti hanno un aspetto comune e lo dovrebbe condividere la stessa base di utenti.trasparente all'utente su più siti (single sign-on + single sign-off)
e in tal caso estremo voglio ancora tutti i siti a trasparente (per quanto possibile) le sessioni utente quota con le seguenti proprietà chiave:
Single sign-on. Quando utente accede al
passport.example.org
e visite qualsiasi altro sito - dovrebbe essere trattato come loggatogli utenti registrati ottenere “Ciao,
$username
“saluto nella testata del sito e diversi menu di navigazione, messa in vendita di servizi che hanno accesso. . Se non ha effettuato l'accesso, invece di saluto c'è un collegamento "Accedi", che punta apassport.example.org/signon
.L'elenco dei domini trusted è noto, quindi è abbastanza semplice implementare con OpenID o con qualche protocollo homebrewn leggero. Quando l'utente per prima cosa visita il sito , lo sto reindirizzando a un endpoint di autenticazione speciale a
passport.example.org
, che poi reindirizza automaticamente a lui indietro, con informazioni di identità (o "non firmato" identità anonima) incluso. Per la maggior parte dei browser questo è completamente trasparente. Ovviamente, sto usando i valori nonce per combattere i loop di reindirizzamento.Single sign-off. Quando l'utente fa clic su "firma" nell'intestazione di qualsiasi sito la volta successiva che visita un sito, deve essere considerato "non connesso".
OpenID non è stato progettato per questo. La mia idea attuale (ho già un'implementazione parzialmente funzionante) è quella di inviare non l'identità dell'utente, ma il token di sessione "globale" e condividere la tabella delle sessioni globali (global_session_token ↔ relazione utente) nel DB.
Supporto per robot e utenti senza chiave. I siti stanno avendo aree pubbliche, che dovrebbero essere accessibili da dagli user-agent senza alcun supporto per i cookie.
Per questo motivo, il reindirizzamento di cui ho parlato in (1) diventa un problema, perché per ogni singola richiesta di pagina, finirò con il lancio di user-agent su auth endpoint e ritorno. Non solo questo confonderà i robot, ma inquinerà il mio database di sessione con le sessioni di decesso alla nascita molto rapidamente. E sicuramente non voglio visualizzare "hey, non hai i cookie abilitati, vai via!", Sarebbe estremamente scortese e deludente. Mentre richiedo il supporto dei cookie per l'accesso, voglio che gli utenti leggano liberamente a cosa servono i siti e così via - senza alcuna restrizione.
E io esplicitamente non voglio mettere ID di sessione negli URL ad eccezione di alcuni trasparenti reindirizzamenti cross-domain che ho menzionato. Credo che fare questo sia un problema di sicurezza e in generale una brutta cosa.
E qui sono quasi fuori dalle idee.
Okay, so che e 'difficile, ma Google in realtà fa questo in qualche modo con (google.com
, google.
sacco-di-gTLD, gmail.com
e così via), giusto? Quindi questo dovrebbe essere possibile.
sarei grato sia per Description Protocol idee (che sarebbe il migliore) o link ai sistemi (sia il codice per leggere o semplicemente vivere siti per guardare e imparare su) già attuare con successo una cosa del genere.
Per riassumerlo: Diversi domini senza radice comune, base utente condivisa, accesso singolo, accesso singolo, nessun cookie richiesto per la navigazione anonima.
Tutti i siti si trovano sulla stessa rete (ma si trovano su server diversi) e parzialmente lo condividono lo stesso database PostgreSQL (che si trova nei diversi schemi dello stesso database). La maggior parte dei siti sono scritti con Python/Django, ma alcuni usano PHP e Ruby on Rails. Mentre sto pensando a qualcosa di framework- e linguistico-agnostico, sono grato di indicare eventuali implementazioni. Anche se non sarò in grado di usarli, se avrò l'idea di come è fatto, forse sarò in grado di realizzare qualcosa di simile.
No, non è difficile. È solo un trucco, come trucchi di carte. Una volta che sai come, è facile. :-) –