SAML vs accesso federato con OAuth


100

Qual è la differenza tra SAML e accesso federato con OAuth? Quale soluzione ha più senso, se un'azienda vuole utilizzare una webapp di terze parti, ma vuole anche il single sign-on ed essere l'autorità di autenticazione?

Risposte:


128

Risolvono diversi problemi.

SAML è un insieme di standard che sono stati definiti per condividere informazioni su chi è un utente, quali sono i suoi attributi e per darti un modo per concedere / negare l'accesso a qualcosa o persino richiedere l'autenticazione.

OAuth riguarda più la delega dell'accesso a qualcosa. In pratica stai permettendo a qualcuno di "agire" come te. È più comunemente usato per concedere l'accesso alle API che possono fare qualcosa per tuo conto.

Sono due cose completamente diverse.


Alcuni esempi che potrebbero aiutare.

OAuth pensa a un twitter. Diciamo che stai usando Google Buzz e Twitter e vuoi scrivere un'app per essere in grado di mantenere sincronizzati i due. Fondamentalmente puoi stabilire la fiducia tra la tua app e Twitter. La prima volta che colleghi l'app a Twitter, esegui il classico prompt per accedere a Twitter, quindi si apre la finestra di conferma che chiede "Desideri concedere l'accesso a« nome della tua app »?" una volta che fai clic su "sì", la fiducia è stata stabilita e ora la tua app può agire come te su Twitter. Può leggere i tuoi post e crearne di nuovi.

SAML - Per SAML pensa a un qualche tipo di "accordo" tra due sistemi di appartenenza non correlati. Nel nostro caso possiamo utilizzare US Airways e Hertz. Non esiste un set condiviso di credenziali che possa portarti da un sito all'altro, ma supponiamo che Hertz voglia offrire un "affare" a US Airways. (Certo, so che questo è un esempio estremo, ma abbi pazienza). Dopo aver acquistato un volo, offriranno un'auto a noleggio gratuita ai membri del presidente. US Airways e Hertz stabiliscono una qualche forma di fiducia e un modo per identificare l'utente. Nel nostro caso il nostro "ID federato" sarebbe l'indirizzo e-mail e sarebbe un insieme di fiducia unidirezionale Hertz confida che il fornitore di identità di US Airways fornirà un token accurato e sicuro. Dopo aver prenotato il volo, il fornitore di identità di US Airways genererebbe un token e popolerebbe il modo in cui ha autenticato l'utente, così come gli "attributi" sulla persona nel nostro caso l'attributo più importante sarebbe il suo livello di stato in US Airways. Una volta che il token è stato popolato, lo passa tramite un qualche tipo di riferimento o codificato in un URL e una volta arrivati ​​a Hertz, guarda il token, lo convalida e ora può consentire il noleggio gratuito dell'auto.

Il problema con questo esempio SAML è che è solo un caso d'uso specializzato su molti. SAML è uno standard e ci sono quasi troppi modi per implementarlo.


In alternativa, se non ti interessa l'autorizzazione, potresti quasi sostenere che affermi l'autenticazione tramite SAML e OpenID .


4
Continuo a non capire la differenza. "concedi / nega accesso" e "concedi accesso a API" mi sembrano la stessa cosa. Puoi fornire due esempi più simili, così posso vedere le differenze? Ad esempio, perché non possiamo utilizzare SAML per stabilire la fiducia tra la tua app e Twitter? O perché non potresti usare OAuth per Hertz per informare USAirways dell'offerta speciale?
Tim Cooper

3
Ho capito, ma posso sempre fare SSO con OAuth (richiedendo l'accesso a un'API che fornisce l'identità). Ciò significa che OAuth può fare tutto ciò che SAML può fare e altro ancora?
Dirk

@Dirk hai quasi ragione, ovvero possiamo ottenere l'identità dell'utente utilizzando OAuth, così come molte applicazioni richiedono l'accesso tramite Google, Facebook, GitHub per ottenere l'identità dell'utente e altri attributi per consentirgli di entrare nelle loro applicazioni. Ma è vero che possiamo ottenere molto di più che ottenere l'identità utilizzando OAuth.
chirag soni

39

Dai un'occhiata a questa semplice spiegazione riassunta qui:

Molte persone sono confuse riguardo alle differenze tra SAML, OpenID e OAuth, ma in realtà è molto semplice. Sebbene vi siano alcune sovrapposizioni, ecco un modo molto semplice per distinguere tra i tre.

OpenID: Single Sign-On per i consumatori

SAML: Single Sign-On per utenti aziendali

OAuth: autorizzazione API tra applicazioni

Per le persone a proprio agio con i modelli di design OO, penso che ci sia un bel corollario ai modelli di wrapper . Pensa ai modelli Facade , Decorator e Proxy . Fondamentalmente sono tutti uguali, sono solo involucri ... La differenza è l' intenzione di ogni modello .

Allo stesso modo, SAML, OAuth e OpenID facilitano intenzioni diverse tramite un meccanismo sottostante comune , che è il reindirizzamento a un provider di servizi / autorità di identità per alcune interazioni private, seguito dal reindirizzamento all'app di terze parti di origine.

Guardandoti intorno in rete troverai delle sovrapposizioni tra le funzionalità dei protocolli. L'autenticazione tramite OAuth è perfettamente ragionevole. SSO su OAuth potrebbe non avere molto senso, poiché SAML e OpenID sono specificamente orientati all'identità federata.

Alla domanda stessa, in un contesto aziendale SAML sembra più appropriato di OAuth per SSO . Scommetto che se guardi le app di terze parti che vorresti integrare con le tue identità aziendali, scoprirai che sono già progettate per integrarsi con SAML / LDAP / Radius ecc. IMO OAuth è più appropriato per l'interazione Internet tra applicazioni o forse applicazioni che comprendono un'architettura orientata ai servizi in un ambiente aziendale di grandi dimensioni.

Le regole di autorizzazione possono essere specificate in un ambiente aziendale anche in altri modi. LDAP è uno strumento comune per questo. Organizzare gli utenti in gruppi e associare i privilegi dell'applicazione contro l'appartenenza al gruppo è un approccio diffuso. Proprio così, LDAP può essere utilizzato anche per l'autenticazione. Active Directory è un ottimo esempio, anche se preferisco OpenLDAP.


1
Grazie per aver aggiornato il link @Sundeep
quickshiftin

Link aggiornato, tuttavia il riepilogo che era già nella risposta è lo stesso.
quickshiftin

OpenID è costruito solo su oAuth. oAuth non supporta l'interfaccia utente di per sé. OpenId lo fa per noi. Non c'è altra differenza tra oAuth e OpenID
è una trappola il

@ Itatrap non è vero; OpenID sull'autenticazione, OAuth sull'autorizzazione, tuttavia condividono un meccanismo simile (reindirizzamento del browser). Nessuno dei due ha molto a che fare con un'interfaccia utente ... Vedi anche questa risposta . Puoi anche guardare qui . Puoi anche rileggere la mia risposta per maggiori chiarimenti ahah.
quickshiftin

1
@ It'satrap Potresti voler esaminare l ' " autenticazione OpenId Spec costruita su OAuth 2.0"; e anche la specifica OAuth 2.0 "Il framework di autorizzazione OAuth 2.0 " ... Anche in questo caso, una è progettata per l' autenticazione , l'altra per l' autorizzazione . Sfruttare il secondo per il primo è OK poiché condividono un paradigma sottostante comune (per la 3a o 4a volta l'ho detto lol). Tutto riassunto nella mia immutata risposta. Dovresti imparare a leggere fratello.
quickshiftin

3

Trovato un buon articolo qui

inserisci qui la descrizione dell'immagine

SAML (Security Assertion Markup Language) è un insieme di standard per ottenere Single Sign On (SSO), Federation e Identity Management.

Esempio : un utente (principale) si autentica con un sito Web di prenotazione voli, AirFlyer (fornitore di identità) che ha SSO configurato tramite SAML con un sito Web di prenotazione navetta, Shuttler (fornitore di servizi). Una volta autenticato su Flyer, l'utente può prenotare navette su Shuttler senza richiedere l'autenticazione

OAuth (Open Authorization) è uno standard per l'autorizzazione delle risorse. Non si occupa dell'autenticazione.

Esempio : un'app mobile per la condivisione di foto (consumatore OAuth) che consente agli utenti di importare foto dal proprio account Instagram (provider OAuth) che invia un token di accesso temporaneo o una chiave all'app di condivisione foto che scade dopo alcune ore.


2

SAML ha una varietà di "profili" tra cui scegliere per consentire ad altri utenti di "accedere" al tuo sito. SAML-P o SAML passivo è molto comune e abbastanza semplice da configurare. WS-Trust è simile e anch'esso consente la federazione tra i siti web.

OAuth è progettato per l'autorizzazione. Puoi leggere di più qui:

Qual è la differenza tra OpenID e OAuth?


Faccio fatica a capire la differenza tra "login" e "autorizza". Puoi fare un esempio che illustri la differenza?
Tim Cooper

@TimCooper "login" è una terminologia vaga per l' autenticazione mentre "autorizza" è un'autorizzazione
valida

1
@quickshiftin Ok, capisco questa distinzione. La tua risposta sembra implicare che SAML esegue l'autenticazione mentre OAuth fa l'autorizzazione. È corretto? Oppure entrambi fanno entrambe le cose (nel qual caso non so ancora quale sia la differenza).
Tim Cooper

1
@TimCooper I protocolli hanno alcune capacità di sovrapposizione. OAuth è mirato all'autorizzazione, ma supporta anche l'autenticazione . SSO in un contesto aziendale è qualcosa per cui SAML è stato creato appositamente. D'altro canto, SAML supporta anche l'autorizzazione. Il contesto è il fattore più importante quando si decide quale tecnologia utilizzare. L'anno scorso ho scritto un'estensione per Expression Engine che utilizzava SimpleSAMLPhp per autenticare gli utenti su un backend Kerberos, quindi cercare le regole di autorizzazione da un sistema LDAP. È un mondo pazzo là fuori!
quickshiftin

2

Gestiscono un caso d'uso sottile

  • SAML: condivisione delle credenziali (ad es. SSO) di un utente con vari fornitori di servizi (ad es. Web o servizio web)
  • OAuth: un utente che delega un'app per accedere a una risorsa per suo conto


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.