it-swarm-eu.dev

In che modo SAML risolve il problema del single sign-on tra domini?

Diciamo che ho due siti Web che vivono su domini separati e che i loro fornitori di servizi parlano entrambi con lo stesso fornitore di identità su un terzo dominio. Accedo al primo sito Web e eseguo l'autenticazione e ora decido di visitare il secondo sito Web. Il secondo sito Web comunica con il provider di identità, quindi non è necessario effettuare nuovamente l'accesso per accedere al mio account. Come si ottiene questo risultato utilizzando SAML? È possibile utilizzare i cookie in questo caso?

15
user3127

In realtà può essere un cookie, perché non è necessario che sia associato al fornitore di servizi, ma solo al fornitore di identità. Tutti e due i due fornitori di servizi faranno la richiesta di autenticazione al fornitore di identità, quindi il processo per un utente non autenticato sarà lo stesso per sp.example1.com come per sp.example2.com.

Tuttavia, quando la prima richiesta viene effettuata da sp.example1.com e l'utente viene reindirizzato a sso.example3.com, l'utente accederà a sso.example3.com e potrà quindi impostare un cookie per sso.example3.com.

Quindi, quando l'utente visita sp.example2.com, anche l'utente reindirizzerà l'utente non autenticato a sso.example3.com, ma questa volta il browser avrà un cookie da inviare insieme alla richiesta dall'ultima volta che l'utente ha visitato sso .example3.com, anche se quella visita è stata avviata da un altro fornitore di servizi.

Pertanto, il cookie di sso.example3.com può identificare l'utente come già autenticato e il provider di identità può continuare il processo di emissione di un'asserzione per l'utente a sp.example2.com senza richiedere all'utente di completare nuovamente il flusso di lavoro di accesso.

19
Xander

È possibile utilizzare i cookie.

I cookie non sono altro che piccoli pezzi di dati (coppie nome-valore) che vengono memorizzati nel tuo browser dall'applicazione web con cui stai comunicando. A ogni cookie è associato un dominio e un cookie appartenente a example.com non è accessibile da abc.com. È importante notare che ogni volta che il browser invia una richiesta HTTP a un determinato dominio, tutti i cookie associati a quel dominio vengono inviati insieme alla richiesta al server.

Nella terminologia SAML

Identity Provider (IdP) - Fornisce l'autenticazione come servizio

Service Provider (SP) - Si basa su IdP per l'autenticazione dei suoi utenti

SSO utilizzando SAML : supponiamo che ci siano due servizi SP1 e SP2 a cui l'utente desidera accedere.

  1. L'utente visita SP1 e prova ad accedere. SP1 invia una richiesta di autenticazione a IdP e il browser dell'utente viene reindirizzato a IdP dove inserisce le sue credenziali. Dopo aver eseguito correttamente l'autenticazione, l'utente viene nuovamente reindirizzato a SP1 e IdP invia un asserzione a SP1 che contiene informazioni di autenticazione. Ora l'utente è autenticato e può utilizzare i servizi di SP1. In questo caso la risposta proveniente da IdP contiene anche un cookie per identificare l'utente. Questo cookie è memorizzato nel browser.

  2. Ora l'utente apre un'altra scheda nel browser e tenta di accedere al sito Web di SP2. Ancora una volta mentre tenta di accedere al browser viene reindirizzato a IdP e con questo reindirizzamento vengono inviati anche i cookie impostati dall'IdP. L'IdP riceve il cookie e invia un'affermazione che reindirizza il browser a SP2. L'utente ha effettuato l'accesso a SP2 senza dover immettere nuovamente le proprie credenziali.

10
Shurmajee

Credo che mod_auth_openidc implementa questa funzione come "Gestione delle sessioni" utilizzando iframe . Qui

Ma non so se esiste un'altra soluzione migliore/alternativa con altri prodotti SAML/OpenIdC

la sfida è il cookie di sessione, poiché sappiamo che imposteremo cookie di sessione o cookie basati sul tempo nel sito Web SSO, ma come di solito l'utente sta visitando il sito SP1 e SP2, sia il cookie di sessione che il cookie temporale scadranno durante la visita. come manteniamo lo stato di accesso? provare una chiamata Ajax al sito Web SSO al backend? è l'unico modo in cui riesco a pensare.

0
Cyokin zhang