Qual è la differenza tra OpenID e OAuth?




8 Answers

Esistono tre modi per confrontare OAuth e OpenID:

1. Scopi

OpenID è stato creato per l'autenticazione federata, ovvero consente a una terza parte di autenticare i tuoi utenti per te, utilizzando gli account che hanno già . Il termine federato è fondamentale qui perché l'intero punto di OpenID è che qualsiasi provider può essere utilizzato (ad eccezione delle white-list). Non è necessario preselezionare o negoziare un accordo con i fornitori per consentire agli utenti di utilizzare qualsiasi altro account che hanno.

OAuth è stato creato per rimuovere la necessità per gli utenti di condividere le proprie password con applicazioni di terze parti . In realtà è iniziato come un modo per risolvere un problema OpenID: se supporti OpenID sul tuo sito, non puoi utilizzare le credenziali di HTTP Basic (nome utente e password) per fornire un'API perché gli utenti non hanno una password sul tuo sito.

Il problema è con questa separazione di OpenID per l'autenticazione e OAuth per l'autorizzazione è che entrambi i protocolli possono realizzare molte delle stesse cose. Ognuno di essi fornisce un insieme diverso di caratteristiche che sono desiderate da diverse implementazioni ma essenzialmente, sono piuttosto intercambiabili. Al loro centro, entrambi i protocolli sono un metodo di verifica delle asserzioni (OpenID è limitato all'asserzione "this is who I am", mentre OAuth fornisce un "token di accesso" che può essere scambiato per qualsiasi asserzione supportata tramite un'API).

2. Caratteristiche

Entrambi i protocolli forniscono un modo per un sito di reindirizzare un utente da qualche altra parte e tornare indietro con un'affermazione verificabile. OpenID fornisce un'asserzione di identità mentre OAuth è più generico sotto forma di un token di accesso che può quindi essere utilizzato per "porre domande al provider OAuth" . Tuttavia, ognuno di essi supporta diverse funzionalità:

OpenID : la caratteristica più importante di OpenID è il suo processo di scoperta. OpenID non richiede la codifica hard di ciascun provider che si desidera utilizzare in anticipo. Utilizzando la scoperta, l'utente può scegliere qualsiasi provider di terze parti che desidera autenticare. Questa caratteristica di scoperta ha anche causato la maggior parte dei problemi di OpenID perché il modo in cui è implementato è usando gli URI HTTP come identificatori che la maggior parte degli utenti web non ottengono. Altre caratteristiche OpenID ha il supporto per la registrazione client ad-hoc utilizzando uno scambio DH, modalità immediata per ottimizzare l'esperienza dell'utente finale e un modo per verificare le asserzioni senza fare un altro round-trip al provider.

OAuth : la caratteristica più importante di OAuth è il token di accesso che fornisce un metodo di lunga durata per effettuare richieste aggiuntive. A differenza di OpenID, OAuth non termina con l'autenticazione ma fornisce un token di accesso per accedere a risorse aggiuntive fornite dallo stesso servizio di terze parti. Tuttavia, poiché OAuth non supporta l'individuazione, richiede la preselezione e l'hard-coding dei provider che decidi di utilizzare. Un utente che visita il tuo sito non può utilizzare alcun identificatore, solo quelli preselezionati dall'utente. Inoltre, OAuth non ha un concetto di identità, quindi utilizzarlo per il login significa aggiungere un parametro personalizzato (come fatto da Twitter) o effettuare un'altra chiamata API per ottenere l'utente attualmente "connesso".

3. Implementazioni tecniche

I due protocolli condividono un'architettura comune nell'utilizzo del reindirizzamento per ottenere l'autorizzazione dell'utente. In OAuth l'utente autorizza l'accesso alle proprie risorse protette e in OpenID, alla propria identità. Ma questo è tutto ciò che condividono.

Ogni protocollo ha un modo diverso di calcolare una firma utilizzata per verificare l'autenticità della richiesta o della risposta e ognuno ha requisiti di registrazione diversi.

openid oauth

Sto davvero cercando di capire la differenza tra OpenID e OAuth? Forse sono due cose completamente separate?







Usa OAuth se i tuoi utenti potrebbero semplicemente voler accedere con Facebook o Twitter. Usa OpenID se i tuoi utenti sono portacolori che gestiscono i propri provider OpenID perché "non vogliono che nessun altro possegga la propria identità".




Credo che abbia senso rivisitare questa domanda come indicato anche nei commenti, l'introduzione di OpenID Connect potrebbe aver portato più confusione.

OpenID Connect è un protocollo di autenticazione come OpenID 1.0 / 2.0 ma in realtà è costruito su OAuth 2.0, quindi avrai le funzioni di autorizzazione e le funzionalità di autenticazione. La differenza tra i due è spiegata abbastanza bene in questo articolo (relativamente recente, ma importante): http://oauth.net/articles/authentication/




Più un'estensione alla domanda piuttosto che una risposta, ma può aggiungere una certa prospettiva alle grandi risposte tecniche di cui sopra. Sono un programmatore esperto in un certo numero di settori, ma un noob totale alla programmazione per il web. Ora stiamo provando a creare un'applicazione basata sul web usando Zend Framework.

Implementerà sicuramente un'interfaccia di autenticazione utente / password di base specifica dell'applicazione, ma riconosce che per un numero crescente di utenti il ​​pensiero di un altro nome utente e password è un deterrente. Pur non essendo esattamente social networking, so che una percentuale molto ampia di potenziali utenti dell'applicazione ha già account Facebook o Twitter. L'applicazione non vuole o non ha bisogno di accedere alle informazioni sull'account dell'utente da quei siti, ma vuole solo offrire la comodità di non richiedere all'utente di impostare nuove credenziali dell'account se non lo desiderano. Dal punto di vista della funzionalità, sembrerebbe un bambino poster per OpenID. Ma sembra che né Facebook né Twitter siano provider OpenID in quanto tali, sebbene supportino l'autenticazione OAuth per accedere ai dati dei loro utenti.

In tutti gli articoli che ho letto sui due e in che modo si differenziano, non sarebbe stato fino a quando non ho visto l'osservazione di Karl Anderson sopra che "OAuth può essere usato per l'autenticazione, che può essere pensata come un'autorizzazione non operativa" che Ho visto qualsiasi conferma esplicita che OAuth fosse abbastanza buono per quello che volevo fare.

Infatti, quando sono andato a postare questa "risposta", non essendo un membro in quel momento, ho guardato a lungo ea fondo in questa pagina le opzioni per identificarmi. L'opzione per l'utilizzo di un login OpenID o di ottenerne uno se non ne avessi uno, ma nulla su Twitter o Facebook, sembrava suggerire che OAuth non fosse adeguato per il lavoro. Ma poi ho aperto un'altra finestra e ho cercato la procedura di registrazione generale per - ed ecco che c'è una manciata di opzioni di autenticazione di terze parti tra cui Facebook e Twitter. Alla fine ho deciso di utilizzare il mio id google (che è un OpenID) esattamente per il motivo che non volevo concedere l'accesso alla mia lista di amici e qualsiasi altra cosa che Facebook ami condividere con i suoi utenti - ma almeno è un prova che OAuth è adeguato per l'uso che avevo in mente.

Sarebbe davvero bello se qualcuno potesse pubblicare informazioni o suggerimenti su come supportare questo tipo di installazione di autorizzazioni in 3 parti e su come gestire gli utenti che revocano l'autorizzazione o perdono l'accesso al loro sito di terze parti. Ho anche l'impressione che il mio nome utente identifichi un account unico al quale potrei accedere con l'autenticazione di base se volessi configurarlo e accedere allo stesso account tramite altri autenticatori di terze parti (ad es. In modo tale da essere considerato registrato in se ero collegato a uno qualsiasi di Google, Facebook o Twitter ...). Dal momento che questo sito lo sta facendo, qualcuno qui probabilmente ha qualche buona intuizione sull'argomento. :-)

Scusa, è stata una cosa lunga e più una domanda che una risposta, ma l'osservazione di Karl ha fatto sembrare che fosse il posto più appropriato da pubblicare tra il volume di thread su OAuth e OpenID. Se c'è un posto migliore per questo che non ho trovato, mi scuso in anticipo, ci ho provato.




OpenID dimostra chi sei.

OAuth concede l'accesso alle funzionalità fornite dalla parte autorizzante.




OpenId utilizza OAuth per gestire l'autenticazione.

Per analogia, è come se .NET si appoggi alle API di Windows. Potresti chiamare direttamente l'API di Windows ma è così vasto, complesso e gli argomenti del metodo così vasti che potresti facilmente commettere errori / bug / problemi di sicurezza.

Lo stesso con OpenId / OAuth. OpenId si affida a OAuth per gestire l'Autenticazione ma definisce un token specifico (Id_token), firma digitale e flussi particolari.




Entrambi i protocolli sono stati creati per diversi motivi. OAuth è stato creato per autorizzare terze parti ad accedere alle risorse. OpenID è stato creato per eseguire la decentralizzazione della convalida dell'identità. Questo website afferma quanto segue:

OAuth è un protocollo progettato per verificare l'identità di un utente finale e concedere autorizzazioni a terzi. Questa verifica genera un token. La terza parte può utilizzare questo token per accedere alle risorse per conto dell'utente. I token hanno uno scopo. L'ambito viene utilizzato per verificare se una risorsa è accessibile a un utente o meno

OpenID è un protocollo utilizzato per l'autenticazione decentralizzata. L'autenticazione riguarda l'identità; Stabilire l'utente è in realtà la persona che afferma di essere. Decentralizzando ciò significa che questo servizio non è a conoscenza dell'esistenza di risorse o applicazioni che devono essere protette. Questa è la differenza chiave tra OAuth e OpenID.




Related


Tags

openid   oauth