在命令行上,我使用the github-api-signature package's generateKeyPair
函数生成了一个新的密钥对,并提供了我的GitHub帐户的名称和电子邮件以及一个随机密码。
我将生成的密钥对的公共部分放入in my GitHub account on the keys page。
我拿到了私钥,并将其提供给下面的代码片段。
创建提交的请求与PR的编程创建一样成功返回,但是当我访问PR的提交页面时,出现一个框,显示“未验证”,并显示消息“此提交中的签名无法已验证。可能有人试图欺骗您。“
我将它在此页面上提供给我的GPG密钥ID与我在GitHub密钥页面上列出的GPG密钥ID进行了比较,并且该ID匹配,为什么它显示我的提交未经验证?
示例代码:
const privateKey = '[GENERATED PRIVATE KEY]';
const passphrase = '[RANDOM PASSPHRASE FROM EARLIER]';
const author = {
name: '[NAME THAT MATCHES GITHUB]',
email: '[EMAIL THAT MATCHES GITHUB]',
date: new Date().toISOString(),
};
const commitPayload: CommitPayload = {
message: commitMessage,
author,
committer: { ...author },
tree: tree.data.sha,
parents: [branch.data.object.sha],
};
const signature = await githubApiSignature.createSignature(
commitPayload,
privateKey,
passphrase,
);
const result = await got(
`[GITHUB API URL]/repos/[USERNAME]/[REPO_NAME]/git/commits`,
{
protocol: 'https:',
method: 'POST',
body: {
...commitPayload,
signature,
},
json: true
},
);
答案 0 :(得分:1)
这是由提交消息中的结尾\n
引起的,该消息由我用来生成签名的库(而不是我,在发布到GitHub之前)修剪过。
有关我如何进行调试的其他信息,是否可以帮助其他人:
最初,我尝试直接在the guide for creating and verifying detached signatures之后使用openpgp库,并遇到相同的有效性问题。
知道签名已在本地验证后,我知道我必须向GitHub API发送错误消息。 Git Commits API在响应的verification
块中提供了一些有用的反馈:
verification: {
verified: boolean
reason: string
signature: string
payload: string
}
...以及文档页面中有关每种原因含义的进一步信息。
进一步研究有效负载(包括简化所有值)使我发现消息有误。