2010-08-24 5 views
5

fornitore Ogni OpenID ha un URL del provider (per esempio Google: https://www.google.com/accounts/o8/id)DotNetOpenAuth: come implementare un semplice provider OpenId?

Utilizzando OpenIdRelyingParty.CreateRequest sono riuscito con successo per reindirizzare l'utente al provider di Google Url e ricevere la richiamata provider. Tutto ha funzionato bene.

Ora sto cercando di implementare il mio semplice provider OpenId (voglio agire come Google sul mio esempio). DotNetOpenAuth ha una demo del provider chiamata OpenIdProviderWebForms. Per le ultime 4 o 5 ore sono riuscito a collegarmi ad esso utilizzando la stessa demo che sono riuscito a connettere su Google. Primo: non mi è chiaro quale URL dovrei chiamare. Ho provato tutti gli URL (server.aspx, provider.ashx ...) e tutti loro attivano un'eccezione "Nessun endpoint OpenID trovato". Tutte le configurazioni sembrano andar bene.

Come implementare un semplice provider OpenId? Quale URL dovrei chiamare nello OpenRelyingParty.CreateRequest?

risposta

16

Prima di tutto stabilire alcuni termini:

Il User-supplied identifier è la stringa che l'utente effettivamente tipi (o viene attivato facendo clic su un tasto predefinito in RP) che fa scattare la scoperta OpenID di prendere posto. Non è normalizzato e non dovrebbe mai essere usato per rappresentare l'utente nel tuo database perché non è sicuro o unico, ma è un punto di partenza necessario. Scoperta su questo identificatore yeilds o claimed identifier o OP Identifier. Esempi: yahoo.com, myopenid.com, andrewarnott.myopenid.com

Il Claimed Identifier è l'identificatore OpenID che l'utente "controlla" o utilizza come sua identità. Potrebbe o potrebbe non essere un URL (potrebbe essere un XRI). Un'affermazione positiva da un OP sarà sempre un identificativo dichiarato (anche se la scoperta è iniziata con un identificativo OP). Esempi: https://andrewarnott.myopenid.com/

Il OP Identifier, o "OpenID Provider Identifier" è l'OpenID Identifer che RP possono eseguire il rilevamento su di iniziare un identifier select flusso in cui il PS non sa ancora cosa Identifier Ha affermato l'utente sarà. Esempi: https://me.yahoo.com/, http://www.myopenid.com/ e https://www.google.com/accounts/o8/id

Il OP Endpoint è l'URL effettivo che il RP reindirizza l'utente al fine di autenticare l'utente, e viene utilizzato per stabilire associazioni condivisi o eseguire la verifica diretta di un affermazione che utilizza un OP privato associazione. Esempi: http://localhost/server.aspx, http://localhost/provider.ashx, https://www.google.com/accounts/o8/ud (si noti il ​​UD fine invece di id)

Quindi, con tutto ciò che di sfondo, il OpenIdRelyingParty.CreateRequest chiamata dovrebbe ricevere un identificativo fornito dall'utente, che può anche essere un identificatore rivendicato o un OP Identifier. Dovrebbe essere non essere l'endpoint dell'OP. Così, per esempio, si potrebbe passare:

openIdRelyingParty.CreateRequest("http://localhost/sampleop/") 

o

openIdRelyingParty.CreateRequest("http://localhost/user.aspx?username=bob") 
+2

Andrew, grazie mille per tutte queste spiegazioni +1. Mi ha davvero aiutato a chiarire questi concetti. Sono riuscito a fare in modo che le 2 demo di DotNetOpenAuth si connettessero tra loro (OP e RP) ma non sono riuscito a creare il mio OP ea connettermi.Continua a ricevere "Nessun endpoint OpenID trovato", ciò che non è un errore molto esplicativo. Il tuo progetto (DotNetOpenAuth) sembra fantastico ma manca di documentazione. In effetti penso che openid sia privo di documentazione. Non sono riuscito a trovare questi concetti puntati altrove. Grazie comunque :) –

+0

@ André Pena, ho cercato per giorni di far funzionare il mio OP. ma è lo stesso problema che stai avendo. Hai mai risolto questo? –

2

Per gli esempi DotNetOpenAuth MVC, l'url Open ID Identifier da usare è http://localhost:4864/User/Identity (dove OpenIdProviderMvc è configurato per l'esecuzione sulla porta 4864 su localhost)