2010-06-29 13 views
30

Estoy trabajando en un proyecto django de intranet (sin usar GAE) para una empresa que usa Google Apps para iniciar sesión. Por lo tanto, me gustaría que mis usuarios puedan iniciar sesión en mi proyecto django utilizando el inicio de sesión de sus cuentas de google. OpenID parece apropiado, aunque quizás Oauth también podría funcionar.¿Qué biblioteca de openid/oauth para conectar un proyecto django a las cuentas de Google Apps?

Veo una gran cantidad de bibliotecas de nombre similar por ahí para conectar el sistema de autenticación de Django para sistemas de acceso externos:

Esto es lo que me gustaría hacer con la integración: haga que los usuarios inicien sesión con sus cuentas de google, en lugar del sistema django nativo. Mantenga el modelo de permisos de django para cosas como el sistema de administración. Así que creo que eso significa crear automáticamente un nuevo registro de usuario en django. La primera vez que inicie sesión una nueva cuenta no la hemos visto.

¿Alguien con experiencia en el uso de cualquiera de estos proyectos me puede aconsejar sobre cuál funcionaría mejor? ¿O solo consejos sobre cuáles son los más activos/funcionales si los has probado? ¡Gracias!

+0

Google desaprobó su compatibilidad con OpenID, y la mayoría de las respuestas ya no funcionan (o dejarán de funcionar en abril de 2015). Consulte esta pregunta: http://stackoverflow.com/questions/27040648/which-django-openid-library-works-with-new-google-openid –

Respuesta

17

que finalmente consiguió este trabajo, así que voy a responder a mi propia pregunta ya que las respuestas anteriores aquí eran útiles, pero no cuentan toda la historia.

django-openid-auth es bastante fácil de configurar y usar. El archivo README es muy claro. Si lo que desea es utilizar las cuentas de Google estándar (es decir, direcciones @ gmail.com) y luego se configura en settings.py con:

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

Pero si desea utilizar una cuenta de "Google Apps", es decir hospedado Gmail en el dominio de su propia empresa, entonces es más complicado. Obtuve mis detalles del this question. Para utilizar Google Apps cuentas, configurar su 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 

En el futuro esto podría funcionar, pero hoy en día probablemente no lo hará. El problema está en python-openid, que se basa en django-openid-auth. La versión estándar de python-openid no comprende algunas extensiones de protocolo que usa Google. (¿Por qué Google necesita extender el protocolo? Excave a través del http://groups.google.com/group/google-federated-login-api/web/openid-discovery-for-hosted-domains y repórtelo. Buena suerte.) Entonces necesita usar el parche de adieu para python-openid, que está disponible aquí: http://github.com/adieu/python-openid

Instale esto sobre su python-openid existente. Ahora debería funcionar.

tener cuidado con el entorno OPENID_USE_AS_ADMIN_LOGIN ya que requiere que usted tenga una cuenta de usuario de OpenID que es 'personal' o 'superusuario' de usar administrador que no ocurrirá de forma predeterminada. Por lo tanto, deberá realizar un proceso de 2 pasos para habilitar openid, iniciar sesión con su código abierto para crear una cuenta en django, luego usar su cuenta de administrador anterior para marcar su propia cuenta abierta como superusuario, y luego deshabilitar el administrador no abierto. acceso.

Una cosa más: es posible que el administrador de su dominio tenga que habilitar el inicio de sesión abierto para su dominio antes de que esto funcione. El control está en http://www.google.com/a/cpanel/example.com/SetupIdp

+1

Usted ahorró 2 días + valor de trabajo para mí. ¿Te importa una cerveza? –

3

He usado django-openid-auth. Funciona bien, puede crear una cuenta de usuario al firmar por primera vez. También puede asociar el inicio de sesión abierto con la cuenta de usuario en el panel de administración de django.

0

Me gustó que Django socialregistration me permitió conectar las cuentas de Google, Facebook, Yahoo y cualquier otro sitio OpenID con bastante facilidad. Sólo tiene que dar al proveedor como un enlace de esta manera:

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

0

Todos ellos son casi idénticos. Me gusta django-authopenid. Tiene una gran documentación y es extremadamente fácil de usar. Hará exactamente lo que quieras y lo hará mejor que django-openid (que es el único que he probado).

HTH

1

Sé que esta es una respuesta tardía, pero estoy haciendo cosas similares y acabo de descubrir django-socialregistration. que básicamente hace OAuth, OpenID, Facebook Connect, etc. A diferencia de otras opciones, muchos proyectos lo desarrollan activamente y lo utilizan.

Cuestiones relacionadas