开源项目但对API密钥保密

Faj*_*hos 3 authentication api github

我想使用GitHub API创建一个开放源代码项目,但是遇到了在源代码中包含我的密钥的问题。我从各个地方读过,从来没有在源中包含任何秘密密钥,对此我表示同意。我还发现了一些关于通过Web服务器进行身份验证而不是使用户获得自己的API密钥的模糊引用。

据我了解,它将是这样的:

当需要通过GitHub进行身份验证时,我会让用户向我的服务器发送请求。从那里,我将使用自己的API密钥向GitHub进行身份验证,并在成功身份验证之后,将签名返回给提出请求的用户。从那时起,他们可以直接与GitHub通信。那是对的吗?

如果那是它的工作方式,那么我想了解更多有关该过程的信息。这是我第一次使用API​​,所以我对此很陌生。

Faj*_*hos 5

我从来没有收到过这个问题的答案,所以我想我会顺其自然。

开源使用API​​的项目的主要问题是公开您的客户秘密(至少在GitHub的情况下,这就是我发布此问题的原因)。您绝对不应在源代码中包含客户机密。如果有人拥有您的客户机密和客户ID,他们可以有效地模拟您的应用程序。

因此,剩下两个选择。

1)。运行您自己的简单服务器。

2)。要求每个派生您的项目的人都拥有自己的GitHub API密钥。

我建议选择选项2。如果您将应用程序开源,那么它就不再是您的了,您对其他人将如何使用它也没有发言权。那么,为什么要在使用客户端ID和机密时对其他人的应用程序的行为负责?

这里还有另一个问题。在通过GitHub进行身份验证并获得Auth令牌后,您需要以某种方式安全地存储该Auth令牌。最初我没有意识到,但基本上是一个密码。如果您以纯文本格式存储身份验证令牌,而其他人则将其恢复,则他们可以向API发出请求并检索所有用户数据。(这使用了OAuth2和承载令牌。)

确实没有一种将auth令牌存储在客户端上的好方法。当您尝试开源项目时,这也带来了另一个问题。谁使用您的开放源代码项目,本质上都将需要使用他们自己的服务器进行初始身份验证,然后再存储auth令牌。

请记住一些事情。