首页 > 解决方案 > 为什么 GitHub 应用程序使用非对称加密来获取访问令牌,而使用对称加密来签署 webhook?

问题描述

创建 GitHub 应用程序时,您必须生成私钥并设置webhook-secret

第一个用于签署 JWT 令牌,通过该令牌可以获得访问令牌:https ://docs.github.com/en/developers/apps/building-github-apps/authenticating-with-github-apps#authenticating-as -a-github-app

您将使用此密钥签署 JSON Web 令牌 (JWT) 并使用 RS256 算法对其进行编码。GitHub 通过使用应用程序存储的公钥验证令牌来检查请求是否经过身份验证。

后者用于确保 webhook 来自 GitHub:https ://docs.github.com/en/developers/webhooks-and-events/webhooks/securing-your-webhooks

目的是使用您的 SECRET_TOKEN 计算哈希,并确保结果与来自 GitHub 的哈希匹配。GitHub 使用 HMAC 十六进制摘要来计算哈希,(...)

我想了解他们为什么使用两种不同的加密方法。不能其中一个不能用于两个用例吗?

谢谢!

标签: githubencryptioncryptographypublic-key-encryptionencryption-symmetric

解决方案


尽管这两种情况都涉及密码学,但这些都不是加密方法。在这两种情况下,我们都在谈论用于身份验证的数字签名。

第一篇文章是关于您的应用程序通过提供 JWT 令牌来访问 GitHub API。在这种情况下,您使用私钥对令牌进行签名。这是最安全的选择,因为 GitHub 只知道公钥,除了你之外没有其他人知道私钥。它对 GitHub 威胁模型的影响也最小,因为他们不必担心要存储另一个秘密。如果您的私钥泄漏,他们不能受到指责。

在第二种情况下,GitHub 给您回电,需要对自己进行身份验证。在这种情况下,他们无法避免存储一些秘密,因此他们使用更简单的模式:具有共享秘密的 HMAC。


推荐阅读