Twitter 在GPL';d桌面应用程序?

Twitter 在GPL';d桌面应用程序?,twitter,twitter-oauth,desktop-application,Twitter,Twitter Oauth,Desktop Application,在开发需要访问twitter API的桌面应用程序时,必须以某种方式将应用程序的API密钥(特定于应用程序的使用者密钥和使用者机密)传递给用户。Twitter的API TOS声明应用程序的API密钥不能公开,如果出现这种情况,他们会重置它。当该应用程序处于GPL之下,这意味着开发人员需要向用户提供源代码时,该用户如何能够在不公开API密钥的情况下获得该API密钥?有没有标准的方法来处理这个问题? 谢谢 编辑: 为了澄清这种情况,我将它们以明文形式存储在代码中,这是一个有意识的决定。但昨天Twit

在开发需要访问twitter API的桌面应用程序时,必须以某种方式将应用程序的API密钥(特定于应用程序的使用者密钥和使用者机密)传递给用户。Twitter的API TOS声明应用程序的API密钥不能公开,如果出现这种情况,他们会重置它。当该应用程序处于GPL之下,这意味着开发人员需要向用户提供源代码时,该用户如何能够在不公开API密钥的情况下获得该API密钥?有没有标准的方法来处理这个问题? 谢谢

编辑: 为了澄清这种情况,我将它们以明文形式存储在代码中,这是一个有意识的决定。但昨天Twitter支持团队联系我说他们已经重置了我的密钥,他们的理由如下:

C.您不应索取其他开发人员的用户密钥或用户机密,尤其是当这些密钥或机密将被存储或用于该开发人员无法控制的操作时。泄露的密钥和秘密将由Twitter重置。例如,为了提供“推特品牌”服务而要求这些值的在线服务是不允许的。 如果应用程序的密钥公开发布,则允许外部各方劫持应用程序的API访问。这会带来巨大的滥用风险,因此我们已重置您的API密钥。请注意确保这些密钥不会再次公开发布

谢谢, Twitter API政策显然使用了荣誉制度:

是的,这是纯文本。混淆很容易破解, #而且没有办法在Perl脚本中有效或完全隐藏它们。 #所以做个好邻居,别管这家伙,好吗?偷窃 #凭证对用户来说是卑鄙和不方便的。这是幸运的 #与推特的安排。别傻了。谢谢合作。 $oauthkey=(!长度($oauthkey)| |$oauthkey等式'X')? “XXXXXXXXXXXXXXXXXXXXXX”:$oauthkey; $oauthsecret=(!长度($oauthsecret)| |$oauthsecret等式'X')? “XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX”:$oauthsecret; (我已经用Xs替换了实际的密钥,以减少任何人滥用它们的可能性,但请放心,它们在实际的源代码中完全存在!)


此外,我没有看到任何事实上要求你保守这些秘密的东西:我看到的最接近的东西是声明“泄露的密钥和秘密将由Twitter重置。”;他们从来没有真正说出“妥协”是什么意思。

我在这里可能很难理解,但你为什么不将它们存储在配置文件、Windows注册表等中,然后从那里获取它们呢?然后在没有文件的情况下分发应用程序,您就完成了。

另一种解决方案可能是使用服务器,服务器与twitter api交互,您通过桌面应用程序向服务器请求信息


这样,API密钥只存储在服务器上,任何用户都无法获取。

我更新了问题以进一步澄清。我已经使用荣誉系统7个月了,它还在工作,但昨天twitter API支持决定它应该“保护”我并重置我的密钥。从今天起(很长时间,是的),TTyter不再以明文形式存储密钥。他们的主页展示了一个例子,展示了每个用户如何设置自己的密钥:“Request from….successed!”如果twitter坚持要保护你,你就必须将cree.py一分为二,其中一部分是由你维护的代理服务器,而你只有通过它,每个cree.py变体才会向twitter发出请求。否则,你应该让每个想使用cree.py的人都有他们的一套密钥。他们对“荣誉系统”打破他们的TOS非常绝对。我猜他们的API,他们的规则。代理所有请求会很麻烦,我想我可以只设置一个服务器,在第一次运行时向每个客户机提供应用程序API密钥。但是有足够多的GPL桌面应用程序可以访问twitter API(即twitter客户端),因此我正在寻找关于“标准”过程的想法。这个计划的问题是,它要求每个用户都获得自己的API密钥。他们可能不想这么做。如果您正在编写一个希望其他用户自行配置的库,那么这是一个合理的解决方案,但如果您希望绝大多数用户只想下载二进制文件并运行它们,那么这就不太好了。您可以调整您的应用程序,让您的用户一次性获得他们的访问令牌和访问令牌密钥(例如,使用OOB/PIN身份验证)然后存储凭据。从此处开始(以及重新启动应用程序时),它们是经过身份验证的。@me_and wih API key的意思是消费者密钥和消费者机密,而不是访问令牌和机密。正如您所说,访问令牌和机密在第一次运行时通过OOB/PIN身份验证进行处理。这不是一个问题。但是,这个问题是关于如何在桌面中分发和存储消费者密钥和消费者机密顶级应用程序。好的。我理解你为什么认为这是一个问题。我也理解为什么Twitter需要单独的消费者密钥/机密。该应用程序可以打开浏览器并保存消费者密钥/机密……但请理解你的观点。