Как сохранить секрет ключа разработчика в 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 (мой выбор) или простые файлы.
Если вы хотите, чтобы люди просто вставали и работали, вы можете создать приглашение, которое запускается только в первый раз в системе и генерирует файл конфигурации, введя пользовательский ввод.