2011-01-05 6 views
15

Pracuję na kliencie Twitter opartym na Pythonie i dostęp do Twitter API i logowanie przy użyciu OAuth, zarejestrowałem mojego klienta na Twitterze i dali mi unikalny klucz konsumenta i token konsumenta (odtąd nazywany "kluczem programisty"). Są one unikalne dla mojego klienta, a wszystkie kopie mojego klienta muszą używać tego samego klucza programisty. Teraz muszę użyć klucza programisty w skrypcie w języku Python (main.py), a ponieważ jest to skrypt, nie ma pliku binarnego. Ponadto, muszę przesłać mój kod do GitHub, ponieważ używam git na GitHub do śledzenia treści. Jak zachować klucz programisty w tajemnicy? Pamiętaj, że planuję dystrybuować tego samego klienta do użytkowników.Jak zachować klucz programisty w skrypcie Pythona, który jest hostowany na GitHubie

Brelok wydaje się najlepszą opcją, ale chcę, aby tylko aplikacja mogła uzyskać dostęp do kluczy, nawet jej użytkownicy (poza aplikacją). I nikt nie powinien być w stanie dowiedzieć się, jak uzyskać dostęp do kluczy, patrząc na mój kod.

Uwaga: Aby korzystać z Twitter API, pierwszą rzeczą, którą musisz zrobić, jest zarejestrowanie aplikacji klienckiej Każda zarejestrowana aplikacja kliencka będzie zaopatrzona w klucz klienta i tajny klucz tajny podobny do publicznego. i klucze prywatne używane w protokołach takich jak ssh dla tych, którzy są zaznajomieni Ten klucz i tajny klucz zostaną użyte, w połączeniu z biblioteką OAuth w wybranym języku programowania, do podpisania każdego zapytania zgłoszonego do interfejsu API. Proces podpisywania, że ​​ufamy, że ruch, który identyfikuje się sam, jest w rzeczywistości ty. " - http://dev.twitter.com/pages/auth

+0

Nie sądzę, jest to możliwe. Biorąc pod uwagę każdy proponowany mechanizm, dlaczego nie mógłbym po prostu skopiować kodu, który go implementuje i uruchomić go na zewnątrz aplikacji? – aaronasterling

+0

powinieneś użyć xauth, aby uzyskać klucz Oautha od nazwy użytkownika i hasła, a następnie użyć tego klucza OUTH do wykonania żądań. –

+0

Programista musi wyjaśnić na Twitterze swoje powody, dla których chce uzyskać xAuth, zanim uzyska pozwolenie na używanie xAuth. – tarantinofan

Odpowiedz

3

Rozszerzając odpowiedź Apalala, wierzę, że chodzi o serwis internetowy "proxy". Ludzie wysyłają ci swoje prośby, a Ty podpisujesz je w swoim imieniu i przesyłasz do Twittera, gdy tylko pozwolą ci na dostęp do aplikacji.

Nie musisz się martwić o to, że ludzie będą cię spamować, ponieważ będą musieli zalogować się do Twittera, aby go użyć.

Jedyny problem, jak nigdzie indziej, to jak mogę zaufać na tyle, aby umożliwić podanie go w pierwszej kolejności :)

3

Klucz musi znajdować się poza kodem źródłowym i przekazywać go do programu za pomocą wiersza poleceń lub pliku konfiguracyjnego. Nie można ukryć klucza, jeśli umieścisz go w kodzie źródłowym (pojawi się debugger, f.i.).

Co ważniejsze, aby uniknąć kolizji lub znajomości klucza przez użytkownika, nie należy przypisywać tego samego klucza innym użytkownikom. Zazwyczaj jest to usługa internetowa, która zna klucz i rozmawia z serwerem finalnym (na Twitterze). Oprogramowanie klienckie będzie komunikować się z usługą za pomocą klucza użytkownika.

+0

Myślę, że usługa sieciowa byłaby najlepszą opcją, ale ktoś mógłby ją sfałszować, aby uzyskać klucz, prawda? Klucz, o którym mówię, to "klucz konsumenta" i "tajemnica klienta", które są takie same we wszystkich przypadkach mojego klienta. – tarantinofan

+1

W jaki sposób mogą podszyć się pod serwis WWW, który znajduje się na twoim sprzęcie? Klient Python -> Twoja usługa internetowa (przy użyciu dowolnego uwierzytelniania, którego chcesz używać z Twoimi użytkownikami) -> twitter API (używając klucza klienta i tajnego klucza). Wszyscy użytkownicy mogą zrobić, to trafić na twoją usługę internetową, która wymagałaby jakiejś formy uwierzytelnienia (takiej jak klucz dystrybuowany do każdego użytkownika). –

0

Utwórz plik konfiguracyjny, w którym trzymasz klucz. Nie wysyłaj oryginalnego pliku konfiguracyjnego do git-hub.

Możesz użyć Python Config Module (overkill) lub YAML (mój wybór) lub zwykłych plików.

Jeśli chcesz, aby ludzie po prostu zaczęli działać, możesz utworzyć monit, który uruchamia się po raz pierwszy w systemie i wygeneruje plik konfiguracyjny, wprowadzając dane wprowadzane przez użytkownika.

+0

Nie napisałem nic do GitHub. :) Obecnie klucz klienta i klucz konsumenta znajdują się w .gitignore. Ale gdy ludzie zaczną używać, będą potrzebować tego samego klucza tajnego klienta i konsumenta, ponieważ identyfikują wszystkie wystąpienia klienta. – tarantinofan

1

Nie rozpowszechniałbym żadnego klucza z kodem; jeśli ludzie chcą z niego korzystać, będą musieli ubiegać się o własny klucz. Każde inne podejście może być nadużywane.

+0

Klucz, o którym mówię, to "klucz konsumenta" i "tajemnica klienta", które są takie same we wszystkich przypadkach mojego klienta. – tarantinofan

7

Można wykorzystać OAuth.io do tego celu.

Koncepcja jest prosta:

  • po prostu trzeba umieścić swoje klucze API w kluczu kierownika OAuth.io
  • w kodzie źródłowym, użyj OAuth.io public key

Twój tajny klucz nie wycieknie w ten sposób.

Sprawdź to blogpost użyciu API Twittera z OAuth.io: http://blog.oauth.io/api-call-using-twitter-api/

Kompletny przykładowy kod (w javascript) jest JSFiddle: http://jsfiddle.net/thyb/kZExJ/5

$('button').click(function() { 
    OAuth.initialize('oEcDIQahkO4TUAND-yTs-H6oY_M') //OAuth.io public key 
    OAuth.popup('twitter', function(err, res) { 
     // res contains tokens (res.oauth_token and res.oauth_token_secret) 
     res.get('/1.1/statuses/home_timeline.json').done(function(data) { 
      // do what you want with data 
     }) 
    }) 
})