2010-06-29 6 views
30

Pracuję nad intranetowym projektem django (nie używając GAE) dla firmy, która używa Google Apps do logowania. Chciałbym, aby moi użytkownicy mogli logować się do mojego projektu django przy użyciu loginu do konta google. OpenID wydaje się odpowiedni, chociaż może Oauth też może działać?Której biblioteki OpenID/Oauth podłączyć projekt django do kont Google Apps?

widzę dużo podobnie nazwanych bibliotek tam do podłączenia systemu auth Django do zewnętrznych systemów logowanie:

Oto, co chciałbym zrobić z integracją: niech użytkownicy logują się za pomocą swoich kont Google zamiast natywnego systemu django. Zachowaj model uprawnień django dla takich rzeczy, jak system administracyjny. Więc myślę, że oznacza to automatyczne tworzenie nowego rekordu użytkownika w django za pierwszym razem, gdy nowe konto, którego wcześniej nie widzieliśmy, nie będzie już dostępne.

Czy ktoś, kto ma doświadczenie w korzystaniu z któregoś z tych projektów, doradzi mi, który z nich będzie najlepszy? A może tylko porady, które są najbardziej aktywne/funkcjonalne, jeśli je wypróbowałeś? Dzięki!

+0

Google wycofało swoje wsparcie dla OpenID, a większość odpowiedzi przestała działać (lub przestanie działać w kwietniu 2015 r.). Zobacz to pytanie: http://stackoverflow.com/questions/27040648/which-django-openid-library-works-with-new-google-openid –

Odpowiedz

17

wreszcie dostałem tej pracy, więc będę odpowiedzieć na moje własne pytanie, ponieważ dotychczasowe odpowiedzi tutaj był pomocny, ale nie mówią całej prawdy.

django-openid-auth jest dość łatwy w konfiguracji i obsłudze. Plik README jest bardzo przejrzysty. Jeśli chcesz po prostu używać standardowych kont Google (tj @ gmail.com adresy), a następnie skonfigurować go w settings.py z:

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

Ale jeśli chcesz używać konta „google apps”, czyli gospodarzem gmail w domenie twojej firmy, to jest bardziej skomplikowane. Mam moje dane od this question. Aby korzystać z kont Google Apps, skonfiguruj plik settings.py na:

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

W przyszłości może to po prostu zadziałać, ale dzisiaj prawdopodobnie nie będzie. Problem występuje w python-openid, na którym opiera się django-openid-auth. Standardowa kompilacja Pythona-OpenID nie rozumie niektórych rozszerzeń protokołu używanych przez Google. (Dlaczego Google musi przedłużyć protokół? Przeszukaj numer http://groups.google.com/group/google-federated-login-api/web/openid-discovery-for-hosted-domains i zgłoś go.) Musisz więc użyć łaty adieu do python-openid, która jest dostępna tutaj: http://github.com/adieu/python-openid

Zainstaluj to na swoim istniejącym python-openid. Teraz powinno działać.

Bądź ostrożny z ustawieniem OPENID_USE_AS_ADMIN_LOGIN ponieważ wymaga aby mieć OpenID konta użytkownika, która jest „zespół” lub „superuser” użyć administratora, który nie nastąpi domyślnie. Musisz więc wykonać dwuetapowy proces włączania openid, logowania się do openid, aby utworzyć konto w django, a następnie użycie starego konta administratora do oznaczenia własnego konta jako superużytkownika, a następnie wyłączenie nie otwartego konta admina dostęp.

Jeszcze jedno: administrator domeny może potrzebować włączyć logowanie openid dla swojej domeny, zanim to zadziała. Sterowanie odbywa się pod adresem: http://www.google.com/a/cpanel/example.com/SetupIdp

+1

Zaoszczędziłeś 2 dni + wartości pracy dla mnie. Chcesz o piwo ?! –

3

Użyłem django-openid-auth. Działa dobrze, może utworzyć konto użytkownika przy podpisywaniu za pierwszym razem. Możesz również powiązać logowanie openid z kontem użytkownika w panelu administracyjnym django.

0

Podobało mi się, że Django socialregistration pozwoliło mi dość łatwo podłączyć konta Google, Facebook, Yahoo i dowolną inną stronę OpenID. Trzeba tylko dać dostawcy jako odnośnik tak:

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

0

Wszystkie są niemal identyczne. Lubię django-authopenid. Ma świetną dokumentację i jest niezwykle łatwy w użyciu. Zrobi dokładnie to, co chcesz i zrobi to lepiej niż django-openid (który jest jedynym, którego próbowałem).

HTH

1

Wiem, że to późna odpowiedź, ale robię podobne rzeczy i właśnie odkryłem django-socialregistration. w zasadzie to OAuth, OpenID, Facebook Connect itp. W przeciwieństwie do niektórych innych opcji wydaje się być aktywnie rozwijany i wykorzystywany przez wiele projektów.