Zastosowanie protokołu OAuth w aplikacjach Django/Python

OAuth to otwarty protokół pozwalający na bezpieczną autoryzację za pomocą API dla aplikacji desktopowych, mobilnych i aplikacji internetowych. OAuth pozwala użytkownikowi dać dostęp do jego informacji, opcji na stronie A (dostawcy OAuth, np. Twitter) innej stronie B (konsumentowi) bez podawania pełnych danych uwierzytelniających (np. bez podawania loginu i hasła). Standard te obecnie jest implementowany na coraz większej ilości strony, jako że pozwala im wystawiać bezpieczniejsze API, jak i dające pewność użytkownikami co zewnętrzna strona z nimi zrobi. Przykładowa prosta aplikacja webowa przedstawiona jest na twitteroauth.appspot.com - gdzie poprzez OAuth udostępniamy stronie ostatnie tweety z naszego konta na Tweeterze.

Lista dostawców, czyli stron udostępniających API poprzez OAuth jest dość długa. Na liście tej znajdziemy Twittera, Google, MySpace, czy także Gadu Gadu. Dla twórców konsumentów - stron korzystających z takiego API dostępne jest wiele bibliotek dla różnych języków programistycznych.

OAuth i Python

Oprócz prostej biblioteki na oauth.googlecode.com istnieje wiele bibliotek nakładek na poszczególnych dostawców (np. Twittera). Wystarczy przeszukać Githuba, googlecode.com i inne serwisy tego typu. Przykładowo dla Django można użyć aplikacji django-twitterauth.

django-twitterauth w Django

  • Zaczynamy od zarejestrowania klienta/konsumenta na http://twitter.com/oauth_clients. Podajemy nazwę naszej "aplikacji", a także jej typ (aplikacja webowa) i adres callback - adres URL na naszej stronie, na który zostanie przekierowany użytkownik po pomyślnej autoryzacji na stronie Twittera.
    oauth1
  • Po udanym zarejestrowaniu aplikacji wygenerowany zostanie klucz Consumer key oraz Consumer secret, a także podane zostaną podstawowe adresy URL API potrzebne przy wykorzystaniu API:
    • Request token URL: http://twitter.com/oauth/request_token
    • Access token URL: http://twitter.com/oauth/access_token
    • Authorize URL: http://twitter.com/oauth/authorize
  • Pobieramy kod aplikacji z Githuba:
    git clone git://github.com/rcrowley/django-twitterauth.git
  • Skopiuj katalog djang-twitterauth do katalogu z twoim projektem Django. Edytuj settings.py i dodaj aplikację do INSTALLED_APPS, doda ścieżkę do szablonów aplikacji w TEMPLATE_DIRS.
  • Dodaj w settings.py:
    TWITTERAUTH_KEY = 'twój klucz'
    TWITTERAUTH_SECRET = 'twój secret'
    
  • Będziesz musiał pewnie także edytować szablony aplikacji i zmienić nazwy bloków, rozszerzanego szablonu.
  • Do urls.py dodaj mapowanie na widoki, np:
    url(r'^info/?$', 'auth.views.info', name='auth_info'),
        url(r'^login/?$', 'auth.views.login', name='auth_login'),
        # to musi pasować do podanego callbacka w konfiguracji na Twitterze
        url(r'^login/callback/?$', 'auth.views.callback', name='auth_callback'),
        url(r'^logout/?$', 'auth.views.logout', name='auth_logout'),
    
Jeżeli chcesz umożliwić rejestrację/logowanie użytkowników za pomocą konta na Twitterze to prostszym rozwiązaniem może okazać się zastosowanie RPXnow.
RkBlog

Django, 17 October 2009

Comment article
Comment article RkBlog main page Search RSS Contact