Как сохранить ключ разработчика в секрете в скрипте Python, размещенном на GitHub - PullRequest
15 голосов
/ 05 января 2011

Я разрабатываю клиент Twitter на базе Python с открытым исходным кодом, и для доступа к API Twitter и входа в систему с помощью OAuth я зарегистрировал своего клиента в Twitter, и он дал мне уникальный ключ потребителя и токен потребителя (впредькак "ключ разработчика").Они уникальны для моего клиента, и все копии моего клиента должны использовать один и тот же ключ разработчика.Теперь я должен использовать ключ разработчика в скрипте Python (main.py), и поскольку он является скриптом, двоичного кода нет.Кроме того, я должен загрузить свой код в GitHub, так как я использую Git на GitHub для отслеживания контента.Как сохранить мой ключ разработчика в секрете?Пожалуйста, имейте в виду, что я планирую распространять один и тот же клиент среди пользователей.

Кажется, что лучшим вариантом является набор ключей, но я хочу, чтобы только приложение могло получить доступ к кольцу ключей, даже его пользователям (вне приложения).И никто не сможет понять, как получить доступ к связке ключей, посмотрев на мой код.

Примечание: «Чтобы использовать API Twitter, первое, что вам нужно сделать, это зарегистрировать клиентское приложение. Каждое клиентское приложениепри регистрации вам будут предоставлены потребительский ключ и секрет. Эта схема ключей и секретов аналогична открытым и закрытым ключам, используемым в протоколах, таких как ssh, для тех, кто знаком. Этот ключ и секрет будут использоваться вместе с библиотекой OAuth.на выбранном вами языке программирования, чтобы подписывать каждый запрос, который вы делаете к API. Именно благодаря этому процессу подписания мы верим, что трафик, который идентифицирует себя, является вами на самом деле вами ».- http://dev.twitter.com/pages/auth

Ответы [ 5 ]

7 голосов
/ 23 января 2014

Вы можете использовать OAuth.io для этой цели.

Концепция проста:

  • Вы просто должны поместить свои ключи API в диспетчер ключей OAuth.io
  • в исходном коде используйте открытый ключ OAuth.io

Ваш секретный ключ не будет таким образом утек.

Проверьте этот блог, используя Twitter API с OAuth.io: http://blog.oauth.io/api-call-using-twitter-api/

Полный пример кода (в javascript) находится на 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
        })
    })
})
3 голосов
/ 05 января 2011

Продолжая ответ Апалалы, я полагаю, что подразумевается веб-сервис «прокси».Люди отправляют вам свои запросы, а вы подписываете их от своего имени и отправляете в твиттер, как только они, конечно, разрешат доступ к вашему приложению.

Вам не нужно беспокоиться о том, что люди спамят вас, потому что им придется войти в систему.в любом случае, чтобы использовать его в твиттере.

Единственная проблема, как и везде, заключается в том, насколько я доверяю вашему приложению настолько, чтобы оно было разрешено в первую очередь :)

3 голосов
/ 05 января 2011

Ключ должен находиться вне исходного кода и передаваться программе через командную строку или файл конфигурации. Спрятать ключ невозможно, если вы встраиваете его в исходный код (отладчик, f.i., покажет его).

Что еще более важно, чтобы избежать коллизий или того, что пользователи узнают ключ, не следует, чтобы разные пользователи использовали один и тот же ключ. Обычно делается настройка веб-службы, которая знает ключ и общается с конечным сервером (Twitter). Клиентское программное обеспечение будет связываться со службой с помощью ключа для каждого пользователя.

1 голос
/ 05 января 2011

Я бы не распространял ни один ключ с кодом; если люди захотят его использовать, им просто придется подать заявку на получение своего собственного ключа. Любой другой подход может быть нарушен.

0 голосов
/ 05 января 2011

Создайте файл конфигурации, в котором вы будете хранить ключ.Не размещайте исходный файл конфигурации в git-hub.

Вы можете использовать Python Config Module (overkill) или YAML (мой выбор) или обычные файлы.

Если вы хотите, чтобы люди просто получалии вы можете создать приглашение, которое запускается только в первый раз в системе, и сгенерировать файл конфигурации, введя пользовательский ввод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...