2010-06-29 11 views
30

Sto lavorando a un progetto di intranet django (che non utilizza GAE) per un'azienda che utilizza Google Apps per l'accesso. Quindi vorrei che i miei utenti potessero accedere al mio progetto Django utilizzando il loro account di accesso Google. OpenID sembra appropriato, anche se forse Oauth potrebbe funzionare anche tu?Quale libreria openid/oauth per connettere un progetto django agli account Google Apps?

Vedo un sacco di librerie con nomi simili là fuori per collegare il sistema di autenticazione di Django per i sistemi di accesso esterni:

Ecco cosa mi piacerebbe fare con l'integrazione: chiedi agli utenti di accedere con i loro account google, invece del sistema nativo di django. Mantieni il modello dei permessi di django per cose come il sistema di amministrazione. Quindi penso che significhi creare automaticamente un nuovo record utente in django la prima volta che un nuovo account non abbiamo visto prima di effettuare il login.

Qualcuno con esperienza nell'utilizzo di uno di questi progetti mi può consigliare su quale potrebbe funzionare meglio? O solo consigli su quali sono i più attivi/funzionali se li hai provati? Grazie!

+0

Google ha deprecato il proprio supporto OpenID e la maggior parte delle risposte non funziona più (o smetterà di funzionare ad aprile 2015). Vedi questa domanda: http://stackoverflow.com/questions/27040648/which-django-openid-library-works-with-new-google-openid –

risposta

17

fine ho ottenuto questo lavoro, quindi mi rispondere alla mia domanda in quanto le risposte precedenti qui sono stati utili, ma non racconta tutta la storia.

django-openid-auth è in realtà abbastanza semplice da configurare e utilizzare. Il file README è molto chiaro. Se si desidera utilizzare gli account Google standard (cioè indirizzi @ gmail.com), allora si configura in settings.py con:

OPENID_SSO_SERVER_URL = 'https://www.google.com/accounts/o8/id' 

Ma se si desidera utilizzare un account di "Google Apps", vale a dire ospitato gmail a dominio della propria azienda, quindi è più complicato. Ho ricevuto i miei dati dal this question. Per utilizzare Google Apps account, configurare il settings.py a:

OPENID_SSO_SERVER_URL = 'https://www.google.com/accounts/o8/site-xrds?hd=example.com' 
# replace example.com with your hosted google apps domain 

In futuro questo potrebbe funzionare, ma oggi probabilmente non lo farà. Il problema è in python-openid su cui si basa django-openid-auth. La versione standard di python-openid non comprende alcune estensioni di protocollo utilizzate da Google. (Perché google deve estendere il protocollo? Scava attraverso http://groups.google.com/group/google-federated-login-api/web/openid-discovery-for-hosted-domains e riporta indietro. Buona fortuna.Quindi è necessario utilizzare la patch di adieu su python-openid, che è disponibile qui: http://github.com/adieu/python-openid

Installare questo sopra il python-openid esistente. Ora dovrebbe funzionare.

stare attenti con l'impostazione OPENID_USE_AS_ADMIN_LOGIN poiché richiede di avere un account utente OpenID che è 'personale' o 'superuser' da usare amministrazione che non accadrà per impostazione predefinita. Quindi dovrai eseguire un processo in 2 fasi per abilitare openid, accedere con il tuo openid per creare un account in django, quindi utilizzare il tuo vecchio account amministratore per contrassegnare il tuo account openid come superutente e quindi disabilitare l'amministratore non openid accesso.

Un'altra cosa: il tuo amministratore di dominio potrebbe dover abilitare l'accesso openid per il tuo dominio prima che funzioni. Il controllo è a http://www.google.com/a/cpanel/example.com/SetupIdp

+1

Hai risparmiato 2 giorni + valore di lavoro per me. Prenditi cura di una birra ?! –

3

Ho usato django-openid-auth. Funziona bene, può creare un account utente al momento della firma per la prima volta. Puoi anche associare il login di openid con l'account utente nel pannello di amministrazione di django.

0

Mi è piaciuto che Django socialregistration mi consenta di collegare Google Account, Facebook, Yahoo e qualsiasi altro sito OpenID abbastanza facilmente. Hai solo bisogno di dare il provider come un link in questo modo:

<a href="/socialregistration/openid/redirect/?openid_provider={{ 'http://yahoo.com'|urlencode }}"><img src="{{MEDIA_URL}}/images/yahoo.png"/></a>

0

Sono tutte quasi identiche. Mi piace django-authopenid. Ha un'ottima documentazione ed è estremamente facile da usare. Farà esattamente quello che vuoi e lo farà meglio di django-openid (che è l'unico altro che ho provato).

HTH

1

So che questa è una risposta tardiva, ma sto facendo cose simili e ho appena scoperto django-socialregistration. che fondamentalmente fa OAuth, OpenID, Facebook Connect, ecc. A differenza di alcune delle altre opzioni, sembra essere attivamente sviluppato e utilizzato da molti progetti.

Problemi correlati