我想使用GitHub API创建一个开源项目,但是我遇到了在源代码中使用我的密钥的问题。我从各个地方读到从不在源中包含任何密钥,我同意这一点。我还发现了一些关于通过Web服务器进行身份验证而不是让用户获取自己的API密钥的模糊引用。
根据我的理解,它会是这样的:
当需要使用GitHub进行身份验证时,我会让用户向我的服务器发送请求。从那里,我将使用我自己的API密钥对GitHub进行身份验证,并在成功进行身份验证后,将签名返回给发出请求的用户。从那时起,他们可以直接与GitHub沟通。那是对的吗?
如果这是它的工作原理,我想更多地了解这个过程。这是我第一次使用API,所以我对此很陌生。
答案 0 :(得分:5)
我从未收到过这个问题的答案,所以我想我会同时传递我发现的内容。
开源采用API的主要问题是披露您的客户机密(至少在GitHub的情况下,这就是我发布此问题的原因)。您不应该在源中包含您的客户端密钥。如果某人有您的客户机密和客户ID,他们可以有效地冒充您的申请。
所以,这留下了两个选择。
1)。运行您自己的简单服务器。
2)。要求所有分叉项目的人都获得自己的GitHub API密钥。
我建议使用选项2.如果您开源应用程序,它不再是您的,并且您对其他人将使用它做什么没有发言权。那么,为什么你要在使用你的客户端ID和秘密时对其他人的应用程序做什么负责呢?
这里还有另一个问题。一旦您使用GitHub进行身份验证并获得Auth Token,您就需要以某种方式安全地存储该Auth Token。我最初没有意识到,但它基本上是一个密码。如果您以明文形式存储Auth Token并且其他人将其恢复,则他们可以向API发出请求并检索所有用户数据。 (这是使用OAuth2和承载令牌。)
确实没有一种方法可以在客户端上存储身份验证令牌。当您尝试开源项目时,这也会出现另一个问题。使用您的开源项目的人基本上需要使用他们自己的服务器进行初始身份验证,然后还要存储身份验证令牌。
要记住一些事情。