我尝试连接到Soundcloud API并在Golang中获取令牌,但我得到了一个401错误的说法,"错误":" invalid_client"。
我已验证了客户ID和密码。
我的重定向URI存在且为:
http://localhost:8080/platform/soundcloudCallback.html
我的代码如下:
func main() {
v := url.Values{}
v.Set("scope", "non-expiring")
v.Set("client_id", auth.ClientID)
v.Set("response_type", "code")
v.Set("redirect_uri", auth.RedirectURI)
c.AuthURL = AuthEndpoint + "?" + v.Encode()
c.Values = v.Encode()
res := c.Request("POST", url.Values{})
}
func (c *Client) Request(method string, params url.Values) []byte {
params.Set("client_id", "*************")
reqUrl := "https://api.soundcloud.com/oauth2/token"
req, _ := http.NewRequest(method, reqUrl, strings.NewReader(c.Values))
req.Header.Add("Accept", "application/json")
resp, _ := c.client.Do(req)
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
return body
}
我的身体在NewRequest中是否不正确或是其他原因造成的问题?目前还不清楚localhost如何与API协同工作。
解决方案是确保您拥有以下所有内容:
v.Set("scope", "non-expiring")
v.Set("client_id", auth.ClientID)
v.Set("client_secret", "f5e416ddf95aed8d077fccccc0a07821")
v.Set("response_type", "code")
v.Set("redirect_uri", auth.RedirectURI)
v.Set("grant_type", "authorization_code")
对于那些坚持这一点的人,我在blog.rileedesign.com上发表了一篇博客文章,详细介绍了所有内容。
答案 0 :(得分:1)
我认为你还需要设置客户端的秘密,而不仅仅是你的客户端ID。
我还想要一个非过期的访问令牌,但不知怎的,这不起作用。所以每次过期我都会刷新访问令牌。
答案 1 :(得分:1)
我不知道您是否正确进行了身份验证过程。首先,你需要在SoundCloud上设置一个应用程序 - 你已经完成了,因为你有一个客户机密码和一个客户机ID。
然后打开SoundCloud登录页面,输入您的用户名和密码,然后(如果您已成功登录),您将被重定向到具有授权码的重定向URI。该代码非常重要,因为使用该代码可以获得访问令牌。
如果你放入
v.Set("grant_type", "authorization_code")
您还需要使用以下命令设置授权码:
v.Set("code", AUTHORIZATION_CODE)
之后,您将从SoundCloud获得访问令牌,刷新令牌等响应。
编辑:
因此,例如,您的重定向URI看起来像这样
http://redirect.uri
然后,当用户成功通过身份验证后,您将被重定向到包含身份验证代码的URI。它看起来像这样:
http://redirect.uri/?code=AUTHENTICATION_CODE
然后你发出一个POST请求
https://api.soundcloud.com/oauth2/token
包括您的身份验证代码,客户端ID和客户端密钥。响应将包括访问令牌,刷新令牌等。
答案 2 :(得分:1)