为了账号安全,请及时绑定邮箱和手机立即绑定

GitHub 无法正确解析密钥 GoLang API 请求

GitHub 无法正确解析密钥 GoLang API 请求

Go
米脂 2021-11-22 15:38:47
所以下面的代码接收一个创建的公钥,然后传递给一个对象,然后编组到 json 中。然后将此 json 传递到 http 请求中。Github 正在正确解析 json,但返回 ssh 密钥无效。如果我复制内容并在线粘贴密钥,则它可以正常工作。我确实编辑了密钥以删除密钥的 user@hostname 部分(即使我知道它不安全,我也总是这样做)以查看是否是问题所在。func addKeyToGitHub(token string, comment string, publickey []byte) (*http.Response, error) {    if token == "" {        fmt.Println("Please create a token that has 'write:public_key' scope")        open.Run(githubAPPURL)        ir := bufio.NewReader(os.Stdin)        fmt.Print("Enter Token: ")        token, _ = ir.ReadString('\n')    }    k := string(publickey)    //Removes unwanted host at end of file    array := strings.Split(k, " ")    array = array[:len(array)-1]    k = strings.Join(array, " ")    fmt.Println(k)    b := &githubBody{Title: comment, Key: k}    body, err := json.Marshal(b)    if err != nil {        return nil, err    }    req, err := http.NewRequest("POST", githubAPIURL+"user/keys", bytes.NewBuffer(body))    if err != nil {        return nil, err    }    req.Header.Set("Authorization", "token "+token)    req.Header.Set("Content-Type", "application/json")    fmt.Println(req)    client := http.Client{}    return client.Do(req)}这是它输出的内容Please create a token that has 'write:public_key' scopeEnter Token: 3310b4ef5d0dbbb8687b992e6f78e02cd34e4d6dStatus 422Body: {"message":"Validation Failed","documentation_url":"https://developer.github.com/v3/users/keys/#create-a-public-key","errors":[{"resource":"PublicKey","code":"custom","field":"key","message":"key is invalid. It must begin with 'ssh-rsa', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', or 'ecdsa-sha2-nistp521'. Check that you're copying the public half of the key"}]}我已经删除了 ssh 密钥和令牌,所以请不要评论为什么我不应该发布这些。我知道在请求之前一切都已被授权并正确解析(我已经用错误的令牌和错误的 json 格式进行了测试,它们都返回了不同的错误)但我不知道为什么这不起作用。我试图只构建 json 字符串,将其转换为一个字节数组,并以相同的输出来传递它。我不知道这是否重要,但我是通过 VPN 进行的(我更改了地址以显示 github 而不是实际地址)。我已经通过 PostMan(不使用 VPN)测试了这个调用并且它有效,所以我知道服务器有这些 api 调用。
查看完整描述

2 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

用于创建公钥的 GitHub API 文档给出了一个包含小写键的请求正文示例:


{

  "title": "octocat@octomac",

  "key": "ssh-rsa AAA..."

}

而请求键的第一个字符是大写的:


{

  "Title": "octocat@octomac",

  "Key": "ssh-rsa AAA..."

}

我认为解决此问题的最简单方法是在结构上使用 json 结构标记githubBody。例如:


type githubBody struct {

    Title string `json:"title"`

    Key string `json:"key"`

}


查看完整回答
反对 回复 2021-11-22
?
月关宝盒

TA贡献1772条经验 获得超5个赞

您的 OAuth 令牌没有write:public_key范围。范围


查看完整回答
反对 回复 2021-11-22
  • 2 回答
  • 0 关注
  • 180 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信