go - 使用 golang 的 Twitter Oauth

标签 go twitter-oauth

我正在尝试在 Go 中使用以下代码发出此请求“oauth/request_token”:

// GET PARAMS TO REQUEST
t := time.Now().UTC()
values := make(url.Values)
values.Add("oauth_nonce", auth.ANonce)
values.Add("oauth_callback", auth.Path) //http://localhost:8080/oauth
values.Add("oauth_signature_method", "HMAC-SHA1")
values.Add("oauth_timestamp", t.String())
values.Add("oauth_consumer_key", auth.ClientID)

// GET SIGNATURE
baseString := fmt.Sprintf("POST&%s&%s", auth.Path, values.Encode())
key := fmt.Sprintf("%s&", auth.SecretID)

// GENERATE HASH
mac := hmac.New(sha1.New, []byte(key))
mac.Write([]byte(baseString))
signature := base64.URLEncoding.EncodeToString(mac.Sum(nil))

// MAKE THE REQUEST
values.Add("oauth_version", "1.0")
values.Add("oauth_signature", signature)
client := urlfetch.Client(ctx)
req, err := http.NewRequest("POST", auth.RequestToken, nil)
if err != nil {
    return fmt.Errorf("getOAuthToken Request Error: %v", err)
}
// SET HEADER
req.Header.Set("Authorization", fmt.Sprintf("OAuth oauth_nonce=\"%s\", oauth_callback=\"%s\", oauth_signature_method=\"HMAC-SHA1\", oauth_timestamp=\"%s\", oauth_consumer_key=\"%s\", oauth_signature=\"%s\", oauth_version=\"1.0\"", auth.ANonce, auth.Path, t.String(), auth.ClientID, signature))
res, err := client.Do(req)
if err != nil {
    return fmt.Errorf("getOAuthToken Client Error: %v", err)
}
defer res.Body.Close()

bs, err := ioutil.ReadAll(res.Body)
if err != nil {
    return fmt.Errorf("getOAuthToken Error: %v", err)
}

log.Printf("getOAuthToken Response: %s\n", string(bs))

问题是我总是收到此错误作为响应:“getOAuthToken 响应:

{"errors":[{"code":215,"message":"Bad Authentication data."}]}

我认为主要问题出在我的签名上,我做错了什么吗?

最佳答案

虽然代码还有其他问题,但主要问题确实是我的签名,即便如此,我还是设法解决了问题,如果有人遇到同样的问题,我会留下我的代码解决方案github .

关于go - 使用 golang 的 Twitter Oauth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50221812/

相关文章:

go - golang http panic 的全局恢复处理程序

Go常规性能最大化

不指定端口即可进行 gRPC 路由

python - 为什么 go build 找不到 Py_None?

ios - 如果在 iOS 上使用系统帐户进行​​身份验证,则无法检索 Twitter 电子邮件

golang 将 args(一段字符串)作为 "args ... interface{}"传递

javascript - 自动刷新包含 Twitter 帖子的 div

node.js - 如何从 firebase auth 正确获取 Twitter screenName?

perl - OAuth 请求 token 和 Twitter

twitter-oauth - 每次用户登录我的网站时,如何避免要求 Twitter 授予对我的应用程序的访问权限?