2009-03-22 10 views
35

Buduję aplikację w języku Python, która musi komunikować się z dostawcą usług OAuth. SP wymaga, abym określił URL wywołania zwrotnego. Podanie oczywiście hosta lokalnego nie będzie działać. Nie mogę skonfigurować serwera publicznego. Jakieś pomysły poza płaceniem za serwer/hosting? Czy to możliwe?Jak rozwijać się lokalnie na OAuth?

Odpowiedz

18

dwie rzeczy:

  1. OAuth Service Provider w kwestii narusza spec OAuth czy to daje błąd, jeśli nie podasz adresu URL wywołania zwrotnego. callback_url to spec'd to be an OPTIONAL parameter.

  2. Ale na bok, prawdopodobnie chcesz uzyskać wywołanie zwrotne, gdy użytkownik skończy, aby wiedzieć, że możesz wymienić Żeton żądania na token dostępu. Yahoo's FireEagle developer docs mają wiele świetnych informacji, jak to zrobić.

Nawet w drugim przypadku URL zwrotny wcale nie musi być widoczny z Internetu. Dostawca usług OAuth przekieruje przeglądarkę, której używa użytkownik, aby podać swoją nazwę użytkownika/hasło do adresu zwrotnego adresu URL.

Dwa powszechne sposoby osiągnięcia tego celu to:

  1. Tworzenie niemego usługę internetową z poziomu aplikacji, który nasłuchuje na jakimś porcie (powiedzmy, http://localhost:1234/) dla zwrotnego zakończeniem lub
  2. Zarejestruj protokół handler (będziesz musiał sprawdzić w dokumentacji dla twojego systemu operacyjnego, w szczególności, jak to zrobić, ale umożliwia działanie takich rzeczy, jak < a href = "skype: 555-1212" >).

(Przykładem przepływu, że wierzę jesteś opisujące lives here).

0

Można by utworzyć 2 Aplikacje? 1 do wdrożenia, a drugi do testowania.

Alternatywnie, możesz również uwzględnić parametr oauth_callback, gdy żądasz tokenu żądania. Niektórzy dostawcy przekierowują się do adresu URL określonego przez oauth_callback (np. Twitter, Google), ale niektórzy zignorują ten URL wywołania zwrotnego i przekierowują go do podanego podczas konfiguracji (np.Yahoo)

4

Było to na Facebooku OAuth - w rzeczywistości było w stanie określić "http://127.0.0.1:8080" jako adres URL witryny i URL wywołania zwrotnego. Zajęło to kilka minut, zanim zmiany w aplikacji na Facebooku się rozprzestrzeniły, ale potem zadziałało.

+2

Rzeczywiście. 'localhost' nie będzie działać, ale' 127.0.0.1' będzie. –

10

W przypadku korzystania * System stylu nix utworzyć alias jak 127.0.0.1 mywebsite.dev w /etc/hosts (trzeba mieć linię, która jest podobna do wyżej wymienionych w pliku Użyj http://website.dev/callbackurl/for/app w oddzwaniania URL i podczas testowania lokalnego.

+1

Windows ma również plik hosts. W systemie Windows 7 jest to w 'C: \ Windows \ System32 \ drivers \ etc \ hosts' –

0

W jaki sposób rozwiązałem ten problem (używając interfejsu OAuth BitBucket), podałem adres URL wywołania zwrotnego do localhost (lub czegokolwiek, do cholery, którego naprawdę potrzebujesz), a następnie podążając za autoryzowanym adresem URL z curl, ale z niespodziewanym zwrotem HTTP Przykład:

curl --user BitbucketUsername:BitbucketPassword -sL -w "%{http_code} %{url_effective}\\n" "AUTH_URL" -o /dev/null 

Wkładanie dla twoich danych uwierzytelniających i adresu URL autoryzacji (pamiętaj, aby uciec od wykrzyknika!).

Co powinieneś otrzymać coś takiego:

200 http://localhost?dump&oauth_verifier=OATH_VERIFIER&oauth_token=OATH_TOKEN 

I można zeskrobać oath_verifier z tego.

robi to samo w Pythonie:

import pycurl 
devnull = open('/dev/null', 'w') 
c = pycurl.Curl() 

c.setopt(pycurl.WRITEFUNCTION, devnull.write) 
c.setopt(c.USERPWD, "BBUSERNAME:BBPASSWORD") 
c.setopt(pycurl.URL, authorize_url) 
c.setopt(pycurl.FOLLOWLOCATION, 1) 
c.perform() 

print c.getinfo(pycurl.HTTP_CODE), c.getinfo(pycurl.EFFECTIVE_URL) 

Mam nadzieję, że jest to przydatne dla kogoś!

+0

Ograniczeniem tego (przynajmniej w przypadku BitBucket) jest to, że musisz odwiedzić adres URL, aby zaakceptować kliknięcie przynajmniej na początku. A potem myślę, że pamięta twoje referencje. –

Powiązane problemy