Google apps login in django
Ich bin die Entwicklung einer django-app, die mit google apps integriert. Ich möchte, um die Benutzer-login mit Ihrem google apps-Konten (Konten in google gehosteten domains, nicht google-Konten), so können Sie den Zugriff auf Ihre Dokumente, Kalender, und so weiter.
Um es zu tun, die ich heruntergeladen und gestartet mit django_openid_auth (und damit, python-openid).
Erste, um es zu testen, habe ich diese url in meine Einstellungen:
OPENID_SSO_SERVER_URL = 'https://www.google.com/accounts/o8/id'
Und mit dass ich es geschafft, leiten Sie den Benutzer auf die google-Konten-Seite einloggen und dann wieder auf meinen eigenen domain, mit der Authentifizierung Zyklus beschrieben durch die google-Leute erfolgreich abgeschlossen. Jedoch, um die Anmeldung zu google-Konten ist von geringem nutzen für mich, da ich möchte das die Benutzer, die ein google apps-Konto in Ihrer domain gehostet -nicht aber eine google-Konto - login mit.
Um das zu tun, ich lese die google-Artikel über die Entdeckung "die Entdeckung OpenID Endpunkte für Hosted Domains", und änderte den oben genannten Einstellung:
OPENID_SSO_SERVER_URL = 'https://www.google.com/accounts/o8/site-xrds?hd=<my-domain>.com'
-wo natürlich <my-domain>
ist meine eigentliche Domäne 😉
Aber das backend reagiert mit folgender Meldung:
OpenID authentication failed: HTTP
Antwort status von Identitäts-URL-host
ist nicht 200. Wurde der status 404
Debuggen ein wenig konnte ich herausfinden, dass der code in python-openid (version 2.2.4) ist die eine, die ist falsch die Antwort von google, aber ich bin ziemlich auf Verlust hier.
Ich gesehen habe, wird die Authentifizierung in meiner eigenen domain arbeiten socialwok.com und puffypoodles.com Also ich bin mir ziemlich sicher, dass das auth-Zyklus für meine google apps-domain funktioniert, aber irgendwie python-openid kann nicht scheinen, um es zu vervollständigen (obwohl, und ich wiederhole noch einmal, es funktioniert Prima mit plain old google-Konten).
Sollte ich versuchen zu beheben python-openid, oder gibt es eine andere Möglichkeit dieses Problem zu beheben? Hat jemand erfolgreich geschafft, sich mit google apps in eine Reine django-app (nicht in der google app engine)?
- Tauchen in den Quellcode des python-openid ist wohl der Schnellste Weg. Holen Sie sich die Quelle, stellen Sie es mit "python setup.py entwickeln" und starten Instrumentierung mit print-Anweisungen oder was auch immer Ihre Lieblings-debugging-Strategie ist. Python-code ist in der Regel lesbar und hackable, und Sie brauchen nicht zu warten, für Antworten in den Mailinglisten / bugtrackers / SO...
- Danke, ich war mir nicht bewusst das
develop
wechseln. Dennoch, ich habe das Debuggen Sie den code, und ich fand heraus, dass, wenn die yadis Protokoll versucht, sich die domain zu beweisen, dass es ein Anbieter in der Tat, es kommt ein 404 (durch eine einfache urllib2 offenen Methode), So daß ich vermute, es geschieht, weil der domain-admin noch nicht registriert meine domain als sichere openID-provider; aber die Frage bleibt: warum puffypoodles.com Authentifizierung ohne Probleme? Gibt es etwas, was der Unterschied zwischen standard openID-Provider und die von google gehosteten domains? - Veröffentlichen Sie Ihren code irgendwo, damit ich versuchen kann zu reproduzieren und Debuggen das Problem, das Sie sehen.
- Die Google-URL erwähnt, nicht zur Verfügung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Laut http://groups.google.com/group/google-federated-login-api/web/openid-discovery-for-hosted-domains, Google verändert die Art und Weise der IdP-Discovery und user-XRDS-check ein wenig, um Google Apps-Nutzer openid in http://example.com/openid?id=108441225163454056756 Art von format, ohne zu Fragen der Benutzer zur Erstellung Ihrer eigenen openid-Server. Für kleine Unternehmen, die Menschen können sich Ihre openid unter Ihrer domain mit weniger als nur einen domain-Namen, wenn Sie Google Apps verwenden.
Könnte dies ein guter Ansatz, weil die Menschen könnten Ihre Google Apps-Konto für die Authentifizierung, und Sie können immer noch geben openids unter Ihrer eigenen Domäne, die Sie ändern Sie die Authentifizierungs-backend und in der Zukunft. Es ist einfach und erweiterbar, aber leider hat es nicht zum standard noch. Also, wenn Sie standard-Bibliothek, wie python-openid, werden Sie auf Probleme stoßen.
Um diese Probleme zu lösen, müssen Sie die patch-python-openid selbst zu Folgen Google ' s Ansatz.
Ich lief in das gleiche problem vor und ich habe eine gepatchte version von python-openid v2.1.1, die für mich funktioniert.
Wenn Sie brauchen, ich könnte meinen code nach etwas Aufräumen. Es war ein schneller patch, also nicht zu viel erwarten 🙂
Ich denke, man kann einen Versuch geben http://github.com/hudora/django-googleappsauth
aber ich fand einige bugs versucht, Sie zu beheben und übersetzen Kommentare