尽管GPG密钥ID匹配

时间:2020-06-02 15:44:10

标签: github github-api github-api-v3

在命令行上,我使用the github-api-signature package's generateKeyPair函数生成了一个新的密钥对,并提供了我的GitHub帐户的名称和电子邮件以及一个随机密码。

我将生成的密钥对的公共部分放入in my GitHub account on the keys page

我拿到了私钥,并将其提供给下面的代码片段。

创建提交的请求与PR的编程创建一样成功返回,但是当我访问PR的提交页面时,出现一个框,显示“未验证”,并显示消息“此提交中的签名无法已验证。可能有人试图欺骗您。“

enter image description here

我将它在此页面上提供给我的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
  },
);

1 个答案:

答案 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
}

...以及文档页面中有关每种原因含义的进一步信息。

进一步研究有效负载(包括简化所有值)使我发现消息有误。