3

我想使用 GitHub API 创建一个开源项目,但是我遇到了一个问题,我的密钥在源代码中。我从不同的地方读过,从来没有在源代码中包含任何密钥,我同意这一点。我还发现了一些关于通过网络服务器进行身份验证而不是让用户获取自己的 API 密钥的模糊参考。

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

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

如果这就是它的工作原理,我很想知道更多关于这个过程的信息。这是我第一次使用 API,所以我对此很陌生。

4

1 回答 1

7

我从来没有收到过这个问题的答案,所以我想我会传递我在此期间发现的东西。

开源使用 API 的项目的主要问题是泄露您的客户端机密(至少在 GitHub 的情况下,这就是我发布这个问题的原因)。您永远不应该在源代码中包含您的客户端密码。如果有人知道您的客户端密码和客户端 ID,他们可以有效地模拟您的应用程序。

所以,这留下了两个选择。

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

2)。要求每个 fork 项目的人都获得自己的 GitHub API 密钥。

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

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

在客户端上存储身份验证令牌确实不是一个好方法。当您尝试开源您的项目时,这也会带来另一个问题。无论谁使用您的开源项目,基本上都需要使用他们自己的服务器进行初始身份验证,然后还要存储身份验证令牌。

只是一些事情要记住。

于 2013-03-03T09:57:49.810 回答