无法让Oauth2(Twitter)工作 - 返回无效令牌

时间:2016-01-13 23:35:03

标签: go oauth-2.0 twitter-oauth

所以我有点像Go的新手,所以请原谅我的无知。我尝试使用oauth2对Twitter进行一个简单的REST API调用,仅用于#34;应用程序"电话,但我一直得到"无效或过期的令牌"回来是一个错误。

任何人都有设置此类内容的经验吗?

回复是:{"错误":[{"代码":89,"消息":"令牌无效或过期。&#34 ;}]}

package main

import "fmt"
import "encoding/base64"
import "io/ioutil"
import "time"
import "golang.org/x/oauth2"

func main() {
    config := &oauth2.Config{
        Endpoint: oauth2.Endpoint{
            AuthURL: "https://api.twitter.com/oauth2/token",
            TokenURL: "https://api.twitter.com/oauth/request_token",
        },
    }
    accessToken := base64.StdEncoding.EncodeToString([]byte("{Consumer Key (API Key)}:{Consumer Secret (API Secret)}"));
    token := &oauth2.Token{
        AccessToken: accessToken, 
        Expiry: time.Now().Add(time.Duration(24)*time.Hour)
    }
    httpClient := config.Client(oauth2.NoContext, token)
    resp, err := httpClient.Get("https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=google")
    if (err != nil) {
        fmt.Printf("Error: %s", err)
    }
    defer resp.Body.Close();
    body, err :=  ioutil.ReadAll(resp.Body);
    if (err != nil) {
        fmt.Printf("Error: %s", err)
    }
    fmt.Printf("Access Token: %s\nToken: %s\nResponse: %s\n", accessToken, token, body)
}

1 个答案:

答案 0 :(得分:5)

结果发现我没有利用客户端凭证oauth2包。我能够让它发挥作用。

希望这可以帮助将来的某个人:

package main

import "fmt"
import "io/ioutil"
import "golang.org/x/oauth2"
import "golang.org/x/oauth2/clientcredentials"

func main() {
    config := &clientcredentials.Config{
        ClientID:     "{App Key}",
        ClientSecret: "{App Secret}",
        TokenURL:     "https://api.twitter.com/oauth2/token",
    }
    tok, err := config.Token(oauth2.NoContext)
    httpClient := config.Client(oauth2.NoContext)
    resp, err := httpClient.Get("https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=google")
    if (err != nil) {
        fmt.Printf("Error: %s", err)
    }
    defer resp.Body.Close();
    body, err :=  ioutil.ReadAll(resp.Body);
    if (err != nil) {
        fmt.Printf("Error: %s", err)
    }
    fmt.Printf("Access Token: %s\nToken: %s\nResponse: %s\n", tok, body)
}