github - 为什么 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 十六进制摘要来计算哈希,(...)
我想了解他们为什么使用两种不同的加密方法。不能其中一个不能用于两个用例吗?
谢谢!
解决方案
尽管这两种情况都涉及密码学,但这些都不是加密方法。在这两种情况下,我们都在谈论用于身份验证的数字签名。
第一篇文章是关于您的应用程序通过提供 JWT 令牌来访问 GitHub API。在这种情况下,您使用私钥对令牌进行签名。这是最安全的选择,因为 GitHub 只知道公钥,除了你之外没有其他人知道私钥。它对 GitHub 威胁模型的影响也最小,因为他们不必担心要存储另一个秘密。如果您的私钥泄漏,他们不能受到指责。
在第二种情况下,GitHub 给您回电,需要对自己进行身份验证。在这种情况下,他们无法避免存储一些秘密,因此他们使用更简单的模式:具有共享秘密的 HMAC。
推荐阅读
- openxml - 显示/交互/可见 ClosedXML Excel.XLWorkbook 不保存
- java - hibernate : 如果不为空,则绑定参数
- php - 如何为查询选择的每个结果插入一个新行
- react-native - IOS 12.02 中的 react-native 可触摸不透明度点击问题
- wso2 - WSO2 5.3.0 - 从 Azure 进行联合身份验证后,多因素身份验证不起作用
- php - Mpdf 使用 pdf 模板创建新的 pdf 文档
- json - 如何在颤动中解析地图Json列表?
- node.js - Loopback4 挑战
- xpath - 如何从 https://fullcalendar.io/docs/date-clicking-selecting-demo 周视图中选择时间范围?
- java - 如何同时创建具有自动装配和非自动装配字段的构造函数?