Spostamento tra siti utilizzando SAML

3

Ho il compito di sviluppare un sistema SSO e sono stato guidato all'uso delle specifiche SAML. Dopo alcune ricerche, penso che comprenda l'interazione tra un fornitore di servizi e un fornitore di ID e come viene confermata l'identità di un utente. Ma cosa succede quando reindirizzo l'utente a un altro fornitore di servizi? Come posso accertare l'identità dell'utente lì? Devo inviare i suoi token di asserzione SAML insieme alla richiesta di reindirizzamento? Oppure il secondo fornitore di servizi deve contattare di nuovo il provider di ID?

    
posta System Down 16.11.2012 - 21:01
fonte

3 risposte

1

Ok, è passato un po 'di tempo per me, ma ci proverò. Ho lavorato con le implementazioni di SimpleSAMLphp e Shibboleth di SAML. SimpleSAMLphp è il più facile dei due per configurare IdP e SP demo.

In ogni caso, quando il tuo utente visita un dominio di un altro SP che utilizza lo stesso IdP a cui è già stato autenticato, puoi fare in modo che il tuo IdP lo autentizzi nuovamente dal cookie sul suo computer o obbligarlo a inserire nuovamente il nome utente / la password . Puoi anche configurare per quanto tempo dura la loro sessione di accesso su IdP.

Il modo in cui trovi la loro identità sul secondo SP è fondamentalmente lo stesso del primo SP. È possibile configurare quali dati utente verranno inviati a ciascun SP singolarmente, a ciascun SP possono essere inviati gli stessi dati utente o dati utente personalizzati in base alle esigenze di tale SP.

Modifica RE: invio i suoi token di asserzione SAML insieme alla richiesta di reindirizzamento? Oppure il secondo fornitore di servizi deve contattare di nuovo il provider di ID?

Credo che le specifiche SAML consentano entrambe. Ricordo che potevo chiedere all'utente di visitare il secondo dominio di SP in cui l'SP avrebbe quindi colpito l'IdP per ottenere i token di asserzione o l'utente può visitare prima l'IdP con una stringa di query che identifica il secondo SP e quindi reindirizzare l'utente a il secondo SP insieme ai token di asserzione.

EDIT # 2 Tra l'altro, mi raccomando di NON scrivere la tua implementazione di SAML a meno che tu non abbia molto tempo e altri membri del team ti aiutino. Diamine, l'ultima volta che ho controllato Shibboleth non ha avuto un'implementazione completa delle specifiche SAML e sono le "persone SAML". Inoltre, è possibile che si verifichino problemi di interoperabilità se si prevede di supportare SP o IdP di terze parti se si dispone di un'implementazione scritta personalizzata.

    
risposta data 16.11.2012 - 21:24
fonte
2

In realtà non devi fare nulla del lavoro se non vuoi. Sono d'accordo con il commento precedente - non costruire una libreria SAML - esistono in molte forme e forme.

Leggi questo per iniziare: link

SSO è pronto all'uso con Shibboleth in modo da non dover nemmeno scimmiottare con il tentativo di reinventare la ruota. Se desideri una panoramica completa, leggi il materiale didattico che ti guiderà attraverso un'intera installazione per l'IdP e un SP Drupal:

link

Dovrai capire come vuoi registrare la fiducia per la tua 'federazione interna di IdP & SP ', ma questo è un piccolo pezzo del puzzle nel grande schema delle cose.

Quindi le tue domande sono:

Ma cosa succede quando reindirizzo l'utente a un altro fornitore di servizi? Risposta: il software SP intercetterà la richiesta e convaliderà se l'utente ha effettuato l'accesso. In caso contrario, si verificherà il reindirizzamento. In tal caso, la configurazione SP sarà la porta per gli attributi rilasciati (di solito dopo che IdP ha rilasciato gli attributi ad esso).

Come posso accertare l'identità dell'utente lì? Ans: vedi sopra. Scegli il tuo identificatore con saggezza. Consigliatissimo di NON utilizzare l'e-mail come identificatore. TL; DR è modifiche alle e-mail ed è una scelta sbagliata.

Devo inviare i suoi token di asserzione SAML insieme alla richiesta di reindirizzamento?

Ans: non ti interessa. Lascia che sia il software Idp + SP a occuparsene. Leggi i documenti se hai bisogno di approfondire ciò che accade, ma la gente dell'app non ha bisogno di esserne disturbata.

Oppure il secondo fornitore di servizi deve contattare di nuovo il provider di ID?

Ans: l'IdP viene consultato per recuperare le informazioni sugli attributi quando l'utente ha eseguito l'accesso correttamente.

Il "Ho il compito di sviluppare un sistema SSO" richiede probabilmente alcune considerazioni su pianificazione e scala (ad esempio tecnologia, numero di siti, ecc., pubblico degli utenti più una serie di altre domande di pianificazione). Sarebbe bene inchiodarli giù:)

    
risposta data 16.11.2012 - 23:42
fonte
0

Stavo guardando le risposte a questa domanda e ci volle ancora un minuto prima che qualcosa di veramente ovvio mi saltasse addosso. Se l'utente è già connesso all'IDP, quando si passa da un fornitore di servizi all'altro, ciascuno contatterà l'idP e l'idP vedrà lo stesso cookie che ha lasciato dalla prima volta che ha effettuato l'accesso.

Quindi, se si utilizza SSO avviato da SP, non è necessario eseguire altro lavoro per spostarsi tra i siti SP. Di seguito è riportato un codice di esempio parafrasato rimosso dall'implementazione SAML .net di Component Space per il sito idP. Nota che dopo aver effettuato l'accesso una volta, quando ti sposti tra SP questo codice riconoscerà che hai già effettuato l'accesso e salta il blocco if che ti manda alla pagina di accesso:

public class SAMLController : Controller
{
    const string ssoPendingSessionKey = "ssoPending";

    public ActionResult SSOService()
    {
        // Either an authn request has been received or login has just completed in response to a previous authn request.
        // The SSO pending session flag is false if an authn request is expected. Otherwise, it is true if
        // a login has just completed and control is being returned to this page.
        bool ssoPending = (bool?)Session[ssoPendingSessionKey] == true;

        if (!ssoPending || !User.Identity.IsAuthenticated)
        {
            string partnerSP = null;

            // Receive the authn request from the service provider (SP-initiated SSO).
            SAMLIdentityProvider.ReceiveSSO(Request, out partnerSP);

            // If the user isn't logged in at the identity provider, force the user to login.
            if (!User.Identity.IsAuthenticated)
            {
                Session[ssoPendingSessionKey] = true;
                FormsAuthentication.RedirectToLoginPage();
                return new EmptyResult();
            }
        }

        Session[ssoPendingSessionKey] = null;

        // The user is logged in at the identity provider.
        // Respond to the authn request by sending a SAML response containing a SAML assertion to the SP.
        // Use the logged in user name as the user name to send to the service provider (SP).
        // Include some user attributes.
        string userName = User.Identity.Name;

        SAMLIdentityProvider.SendSSO(Response, userName, new Dictionary<string, string>());
        return new EmptyResult();
    }

    // ... other methods such as SLO
}
    
risposta data 30.09.2018 - 22:20
fonte

Leggi altre domande sui tag