2010-11-17 6 views
13

Non creo grandi siti web, quindi sono principalmente un utente di openid e sono varie implementazioni. Io uso openid qui in SO, e mi piace perché sto usando il mio account Gmail per tutto (ho intenzione di uscire da gmail in futuro, ma ora lo sto usando per tutto), quindi non devo ricordare un altro login/account.Openid è davvero un incubo? Esiste una soluzione open source che potrebbe "astrarre" tutto in un ID interno?

Quindi, a mio ingenua mente utente, credo che usando OpenID è semplice: avete un sacco di fornitori, quando un utente tenta di accedere, la vostra applicazione chiede al suo/la sua provider: "è questa persona in grado per accedere? ", il provider restituisce" questo utente è valido "con alcuni dati (alcuni possono restituire più dati di altri) o semplicemente non restituisce nulla se si tratta di un login non riuscito, ad esempio.

Avevo intenzione di utilizzare openid in un sito Web futuro. Nella mia mente, penso che utilizzerei una sorta di lib che potrebbe "astrarre" questo per me: il tuo utente accede con i provider, la tua app non ne conosce nessuno, e questa lib restituisce un identificatore univoco da un nome utente da un fornitore. Ad esempio: [email protected] viene utilizzato per accedere. Ha un id univoco nella lib, restituito dopo un calcolo hash o qualcosa del genere, e la tua app lo usa per tutto.

Nella mia applicazione, proverei a trattare solo con questo ID creato da una libid openid che gestirà facebook, twitter, gmail e così via. Forse questa libreria ha una tabella con un nome di provider e quando una persona accede per la prima volta al tuo sito, hai una riga nel database che dice "questo ID univoco è di Twitter". In teoria, questo sembra funzionare nella mia mente.

... ma dopo aver letto Openid is a Nightmare, sto iniziando a pensare se sarebbe davvero una buona idea anche provare a trovare una tale libertà che funzionerebbe perfettamente.

Dal momento che tutti (provider openid) ora hanno il proprio meccanismo di accesso, invece di preoccuparsi di un solo sistema (il mio, dovevo creare il mio meccanismo di accesso) - ora devo preoccuparmi di dozzine di sistemi - e openid doveva rispondere allo esattamente. Ora, ho bisogno di una grande libertà che sto immaginando di astrarre tutto questo casino.

Esiste una libreria come quella che ho descritto? Se è così, è possibile creare un'applicazione che almeno cerchi di comportarsi come un sogno davvero "aperto"?

(So openid non è uguale all'autenticazione di Facebook e così ... ma dal punto di vista dell'utente finale, è lo stesso IMHO, "utilizzare lo stesso accesso attraverso i siti Web". Desidero astrarre il processo di accesso anche se il protocollo non è stato creato solo per questo. Per molti servizi, devi solo sapere se qualcuno è chi sta affermando di essere.)

+0

Come utente finale, ho trovato solo OpenID utile quando ho deciso di installare il mio fornitore nel mio account di hosting personale e utilizzare l'URL del mio sito per il login. Qualche tempo dopo ho scoperto che la "installazione il mio fornitore "non era necessario ... –

risposta

11

Le librerie esistono (come ad esempio DotNetOpenAuth), ma di solito sono solo astratte il protocollo e le specifiche per voi: la vostra applicazione deve ancora essere al corrente dei singoli fornitori (e delle loro stranezze).

Uno dei maggiori problemi con OpenId/OpenAuth secondo me è che molti provider fanno le cose in modo leggermente diverso: alcuni di loro ti daranno le informazioni che chiedi, altri no. Alcuni rispondono a Simpleregistration/Claim, alcuni rispondono a AttributeExchange/Fetch. Alcuni usano un URL generale per l'accesso, alcuni richiedono uno con il nome utente incorporato.

Ci sono molte differenze sottili che rendono OpenId molto più debole di quanto dovrebbe essere. Idealmente avrebbe dovuto essere un sistema che io (come proprietario di un sito Web) posso implementare, e sono fiducioso di supportare ora qualsiasi utente che abbia un account con un provider OpenId. La realtà è abbastanza diversa. E dovrai sempre seguire il tuo utente con i tuoi ID personali, anche se utilizzi OpenId per l'autenticazione.

Ci sono servizi, come ad esempio RPX/Janrain che si propongono di occuparsi di tutti questi dettagli disordinati per voi, ma ho sentito che anche questo ha i suoi grattacapi (ad esempio è menzionato nell'articolo che avete citato).

Alla fine della giornata, probabilmente si tratta del tipo di sito Web che si esegue. Poniti questa (piuttosto cinica) domanda: quanto mi importa se un singolo utente non può accedere? Se la risposta è "molto" (perché ogni numero ti costerà denaro o causerà altro dolore) allora forse dimenticherò openId per ora. Se si tratta di un sito web di massa/gratuito come StackOverflow, allora potrebbe essere la strada da percorrere.


Aggiornamento

C'è un confronto tra alcune implementazioni del provider qui: http://spreadopenid.org/provider-comparison/. Non è più aggiornato, quindi potrebbe non essere aggiornato. [Giù al momento, forse in modo permanente, ma si veda google's cache]

Potreste essere in grado di trovare più informazioni tramite Wikipedia's list of providers

C'è anche una bella comprehensive comparison of providers here.

+0

Ottima risposta. Sapete se esiste una sorta di database o tabella che parla di ciascun fornitore e di come funzionano (come le informazioni che ciascuno di essi fornisce a voi). –

+0

Grazie per l'aggiornamento. –

+0

@Somebody: Nessun problema, ho appena aggiunto un altro link a un confronto di provider che ho trovato di recente. – UpTheCreek

1

Ci sono biblioteche che si occupano di tutto ciò, ma dipende piuttosto dalle tecnologie che si stanno utilizzando. Ho usato django-socialauth con Django ed è fantastico (supporta l'autenticazione tramite Twitter, Facebook, Gmail, Yahoo e OpenID). C'è una vasta lista di librerie disponibili here.

1

Quello che stai descrivendo è più come funziona OAuth, che è sorta di successore di OpenID (usando il termine 'successore' loosely-la sua ottenuto molto più di quanto abbia mai fatto OpenID.) Per Ruby sono disponibili alcune implementazioni, in particolare il prodotto Engage di janrain e la libreria omniauth di Intridea recentemente. Ho usato Engage e mi piace, ma omniauth sembra morto semplice per funzionare e il suo più aperto in quanto non dipende dal servizio di Janrain.

1

Solo per aggiungere un'altra risorsa a questo thread, la libreria HybridAuth è un equivalente PHP open-source delle librerie menzionate sopra. Per quanto posso dire, è l'unica libreria che copre tutte le forme popolari di autenticazione federata, OAuth e OpenID per PHP. La documentazione e gli esempi sono anche abbastanza buoni rispetto ad altri che ho visto.

Credo che la libreria sia ancora un po 'immatura, ma sicuramente un passo nella giusta direzione per unire questo errore di autenticazione per gli sviluppatori PHP.

http://hybridauth.sourceforge.net/index.html

Problemi correlati