Twitter oauth golang获取错误“;代码";:“32”;“讯息”:&引用;无法验证您的身份。”;

Twitter oauth golang获取错误“;代码";:“32”;“讯息”:&引用;无法验证您的身份。”;,twitter,go,twitter-oauth,Twitter,Go,Twitter Oauth,我正在尝试使用golang的twitter帐户实现登录。我是尝试获取请求令牌的第一步。作为参考,我使用了琼斯先生的代码,可在下面的链接 我得到以下错误。请告诉我哪里出了问题: {“错误”:[{“代码”:32,“消息”:“无法验证您的身份。”}]} 这些是我使用的其他函数 func requestString(method string, url string, params url.Values) string { result := method + "&" + escape(

我正在尝试使用golang的twitter帐户实现登录。我是尝试获取请求令牌的第一步。作为参考,我使用了琼斯先生的代码,可在下面的链接

我得到以下错误。请告诉我哪里出了问题:

{“错误”:[{“代码”:32,“消息”:“无法验证您的身份。”}]}

这些是我使用的其他函数

func requestString(method string, url string, params url.Values) string {
    result := method + "&" + escape(url)

    for key, value := range params {
        if len(value) > 0 {
            result += escape("&")

            result += escape(fmt.Sprintf("%s=%s", key, value))
        }
    }
    return result
}

func Sign(message string, tokenSecret string) (string, error) {
    key := escape(twitterConf.ClientSecret) + "&" + escape(tokenSecret)

    h := hmac.New(crypto.SHA1.New, []byte(key))
    h.Write([]byte(message))
    rawSignature := h.Sum(nil)

    base64signature := base64.StdEncoding.EncodeToString(rawSignature)
    return base64signature, nil
}

能够解决问题。我做了两个改变:

  • 在传递加密以创建签名之前对params变量进行编码

    baseString:=“POST”+”和“+encode(twitterConf.Endpoint.RequestTokenUrl)+”&“+encode(params.encode())

  • 为了创建标题,我创建了自己的标题字符串

        headerstring := "OAuth oauth_callback=\"http%3A%2F%2Flocalhost%3A8080%2Foauth%2FtwitterOauth2callback\",oauth_consumer_key=\"consumerkey\",oauth_nonce=\"" +
            params.Get(NONCE_PARAM) + "\",oauth_signature=\"" + escape(signature) + "\",oauth_signature_method=\"HMAC-SHA1\",oauth_timestamp=\"" + params.Get(TIMESTAMP_PARAM) +
            "\",oauth_token=\"" + escape("oauth token") + "\",oauth_version=\"1.0\""
    
    reqnew.Header.Add(“授权”,headerstring)

  • 这解决了问题,我开始获得访问令牌

        headerstring := "OAuth oauth_callback=\"http%3A%2F%2Flocalhost%3A8080%2Foauth%2FtwitterOauth2callback\",oauth_consumer_key=\"consumerkey\",oauth_nonce=\"" +
            params.Get(NONCE_PARAM) + "\",oauth_signature=\"" + escape(signature) + "\",oauth_signature_method=\"HMAC-SHA1\",oauth_timestamp=\"" + params.Get(TIMESTAMP_PARAM) +
            "\",oauth_token=\"" + escape("oauth token") + "\",oauth_version=\"1.0\""