如何在使用Python时不泄露我的秘密密钥(Facebook API)?

2 投票
2 回答
1388 浏览
提问于 2025-04-15 12:44

我正在用PyFacebook API第一次写一个Facebook桌面应用程序。到目前为止,由于我一直在尝试,我只是把秘密密钥和API密钥一起传给Facebook的构造函数,像这样:

import facebook
fb = facebook.Facebook("my_api_key", "my_secret_key")

然后登录(fb.login()会打开一个浏览器),没有遇到任何问题。但是现在,我想分发我的代码,因为这是用Python写的开源项目,我想找个方法来保护我的秘密密钥。维基上提到我可以使用一个服务器,每次我的应用运行时通过服务器请求我的秘密密钥(我理解是这样),但我完全不知道该怎么开始,也不知道该怎么做。我从来没有做过网页编程,也不知道在哪里可以找到服务器,怎么让服务器做我需要的事情,也不知道怎么使用那个服务器。我非常希望能得到一些帮助!

谢谢。

2 个回答

3

Facebook开发者维基上的相关页面建议使用一个服务器组件,这个组件主要用来保存你的秘密钥匙,并处理auth.getSession()这个操作,然后再把一个会话钥匙给你的桌面应用。想了解更多细节,可以查看那个链接。

1

编辑:cmb提到的会话密钥方法比下面描述的代理方法更好。配置文件和GAE仍然适用。/编辑

你可以采取几种方法。如果你的代码是开源的,并且会被其他开发者使用,你可以允许在配置文件中设置密钥。当你分发代码时,可以在文件里放一个假密钥,并提供一些说明,告诉别人如何获取和设置这个密钥。

另外,如果你想采用服务器的方法,基本上就是创建一个代理*,它会接收请求,添加密钥,然后把请求转发给Facebook。一个不错的、免费的(除非你的应用用户很多)基于Python的服务是Google App Engine。他们还有很多教程视频可以帮助你入门。

* 比如,当调用myservice.appspot.com/getUserInfo?uid=12345时,你的服务会执行类似下面的操作。

userinfo = fb.users.getInfo(self.request.get('uid')...)

理想情况下,你希望将其抽象得足够高,这样就不需要每次都明确实现你调用的每个Facebook API。

最后要记住的是,很多Facebook API的调用并不需要传递密钥。

撰写回答