2012-02-13 9 views
6

Jaki jest najlepszy sposób bezpiecznego uwierzytelniania OAuth na Twitterze w JavaScript?Bezpieczne uwierzytelnianie OAuth na Twitterze w JavaScript/jQuery (plus pomocnik po stronie serwera)

Próbuję napisać program, który pozwoli użytkownikowi przeanalizować jego użycie na Twitterze i obserwatorów/znajomych. Napisałem wersję po stronie serwera, która działa przy użyciu modułu pythona tweepy.

Chciałbym podzielić się nim z ludźmi, ale chciałbym, aby uruchamiał się w przeglądarce, aby był skalowalny lub działa na moim małym serwerze.

widzę kolejne pytanie gdzie Skutek jest taki, że nie jest to zalecane i nie jest bezpieczne: JavaScript OAuth sign in with Twitter

Jaki sens jeśli były wysyłanie konsumentów (APP) tajne lub dostępu (użytkownika) w tajemnicy w aplikacji JavaScript.

Ale dlaczego nie mogę zbudować URL po stronie serwera jak tutaj - http://djangosnippets.org/snippets/1353/

Następnie wyślij URL uwierzytelniania powrotem do przeglądarki, coś takiego z OAuth narzędzie na mojej stronie Aplikacje Twittera (nie ważne poświadczenia)

GET & https% 3A% 2F% 2Fapi.twitter.com% 2F1% 2F & dostać% 252Faccount% 252Fverify_credentials_json% 3D% 26oauth_consumer_key% GD0bgcgMU4MDwNfKQpLFQS3% 26oauth_nonce% 3D24ad5049501dee1292afd8cf22307d68% 26oauth_signature_method% 3DHMAC-SHA1% 26oauth_timestamp% 3D1329173626 % 26oauth_token% uPUpxsBc3D283768289LtQ6R1E z1KeD8DOSsm5XpqJaKI28ysYh% 26oauth_version% 3D1.0

Następnie użyj jQuery, aby uwierzytelnić się przy użyciu poświadczeń użytkownika i uruchomić analizę.

To ważna praca, nie chciałbym tego robić, a potem dowiedziałem się, że to nie działa lub jest niebezpieczne. (lub już zostało zrobione)

Czy to jest bezpieczne? Wydaje się, że nie ujawnia żadnych tajemnic.

Czy to zadziała?

Jakieś wskazówki/przykłady na temat właściwego sposobu uwierzytelniania dla nooba jQuery, z koniecznym przetwarzaniem Authorization: header i cookie/redirect?

Czuję, że czegoś brakuje i albo jest jakiś powód, dla którego to nie zadziała, albo powinno już gdzieś istnieć, ale go nie znalazłem. Wielkie dzięki!

Odpowiedz

3

Problem od pana McNuts polega na tym, że oAuth wymaga podania tajemnicy klienta, więc nawet jeśli utworzysz adres URL na serwerze, nadal będziesz przekazywać go z powrotem na stronę, która nadal będzie tajemnica klienta za pośrednictwem serwera proxy HTTP.

Aby zapobiec ujawnianiu swojego tajnego klucza, musisz użyć serwera proxy, aby wykonać żądanie twittera i zwrócić tokena oauth z powrotem do przeglądarki. Jeśli naprawdę martwisz się skalą, chciałbym przyjrzeć się płatnemu na skalę rozwiązania, jak GAE lub Heroku.

+0

Myślałem, że kluczem do podziału klucza konsumenta i tajemnicy klienta jest to, że może odsłonić klucz i nikt nie może nic zrobić bez sekretu. Co może zrobić ktoś z kluczem konsumenta, jeśli nie ma tajemnicy konsumenta? –

+0

Tak, masz rację. Proponujesz zasadniczo, aby twój serwer podpisał się przy użyciu tajemnicy klienta, a następnie przekazać go klientowi. Możesz to zrobić, ale nie jest to bardziej skalowalne, niż tylko to, że serwer wysyła żądanie w imieniu użytkownika. – Alan

+0

Tak, w zasadzie chcę proxy uwierzytelniania, a następnie przeglądarki wykonać kilka wywołań API. To będzie kilkaset połączeń, aż do limitów dławiących. Poza tym zajmą dużo czasu i będą wiązać zasoby podczas pracy. Więc naprawdę wolę nie robić tego na serwerze, będą większe rzędy wielkości. Chciałbym przekazać URL lub token do przeglądarki, a następnie użyć tego do wywoływania interfejsu API za pomocą jQuery lub czystego JavaScript. –

0

Nie bardzo dobrze rozumiem podejście, które proponujesz. Jednak ogólnie rzecz biorąc, OAuth nie może zostać bezpiecznie wdrożony po stronie klienta przeglądarki (z wyjątkiem zamkniętych środowisk, takich jak Java lub Flash). Wdrożenie procesu OAuth w JavaScript jest całkiem możliwe, ale wystawisz swój token tajny/konsumenta. Więc każdy będzie w stanie zastąpić twoją aplikację identyfikującą się z intencjami, takimi jak kradzież wrażliwych danych użytkowników. Jeśli nadal chcesz pracować z JS, zalecam wdrożenie bezpiecznego procesu (uwierzytelnianie i ostateczne przechowywanie tokenu) po stronie serwera przy użyciu Node.js

Powiązane problemy