Как сохранить секрет ключа разработчика в Python script, который размещен на GitHub

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

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

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

Ответы

Ответ 1

Расширяясь ответ Apalala, я считаю, что подразумевается веб-сервис "proxy". Люди отправляют вам свои запросы, и вы подписываете их от их имени и отправляете в твиттер, как только они позволят вашему приложению получить доступ, конечно.

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

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

Ответ 2

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

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

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

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

Проверьте этот блогпост, используя API Twitter с 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

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

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

Ответ 4

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

Ответ 5

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

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

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