客户端凭证流 - 获取访问令牌
Client Credentials Flow - getting access token
如何通过 Client Credentials Flow to Spotify by using Alamofire 收到 access_token?
到目前为止,这是我的代码:
// Spotify API
func callAlamo(url: String) {
let parameters = ["client_id" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"client_secret" : "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy",
"grant_type" : "client_credentials"]
let headers = ["Authorization" : "Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"] // <- xxx is the client_id
Alamofire.request("https://accounts.spotify.com/api/token", method: .post, parameters: parameters, headers: headers).responseJSON(completionHandler: {
response in
print(response.result)
print(response.result.value)
})
}
这是我打印日志的一部分:
SUCCESS
Optional({
error = "invalid_client";
})
这段代码有什么问题?我是否发送了错误的参数或 headers?我是不是忘记了什么?
注:client_id
和client_secret
是正确的
- 如有不明之处,请私信我-
经过多天和2个问题后,我自己弄明白了。这是一个非常简单的修复,令人沮丧。
我所做的只是删除请求中的 headers
参数。
另一种选择是您可以将 headers
设置为 nil
。
Alamofire.request("https://accounts.spotify.com/api/token", method: .post, parameters: parameters).responseJSON(completionHandler: {
response in
print(response.result)
print(response.result.value)
})
嗯,我不知道这是怎么回事。
理论上,正确的执行是:
- 向 url 发出 POST 请求:
https://accounts.spotify.com/api/token
设为headers:
"Content-Type": "application/x-www-form-urlencoded"
"Authorization": "Basic xxxxx"
其中xxxxx是client_id:client_secret的base64编码字符串(所以client_id字符串和client_secret用:分隔)
- 设为body:
"grant_type": "client_credentials"
这会给你正确的回应
例如
{
"access_token": "BQCJeyp3ocQZzSksvNn3IXuvY0NsYI26YMF400jp-7Dd8zGz6ecXyywwmSdy4jrPWwLZA_6l4e59lu8dYfg",
"token_type": "Bearer",
"expires_in": 3600,
"scope": ""
}
如何通过 Client Credentials Flow to Spotify by using Alamofire 收到 access_token?
到目前为止,这是我的代码:
// Spotify API
func callAlamo(url: String) {
let parameters = ["client_id" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"client_secret" : "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy",
"grant_type" : "client_credentials"]
let headers = ["Authorization" : "Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"] // <- xxx is the client_id
Alamofire.request("https://accounts.spotify.com/api/token", method: .post, parameters: parameters, headers: headers).responseJSON(completionHandler: {
response in
print(response.result)
print(response.result.value)
})
}
这是我打印日志的一部分:
SUCCESS
Optional({ error = "invalid_client"; })
这段代码有什么问题?我是否发送了错误的参数或 headers?我是不是忘记了什么?
注:client_id
和client_secret
是正确的
- 如有不明之处,请私信我-
经过多天和2个问题后,我自己弄明白了。这是一个非常简单的修复,令人沮丧。
我所做的只是删除请求中的 headers
参数。
另一种选择是您可以将 headers
设置为 nil
。
Alamofire.request("https://accounts.spotify.com/api/token", method: .post, parameters: parameters).responseJSON(completionHandler: {
response in
print(response.result)
print(response.result.value)
})
嗯,我不知道这是怎么回事。 理论上,正确的执行是: - 向 url 发出 POST 请求: https://accounts.spotify.com/api/token
设为headers:
"Content-Type": "application/x-www-form-urlencoded"
"Authorization": "Basic xxxxx"
其中xxxxx是client_id:client_secret的base64编码字符串(所以client_id字符串和client_secret用:分隔)
- 设为body: "grant_type": "client_credentials"
这会给你正确的回应
例如
{
"access_token": "BQCJeyp3ocQZzSksvNn3IXuvY0NsYI26YMF400jp-7Dd8zGz6ecXyywwmSdy4jrPWwLZA_6l4e59lu8dYfg",
"token_type": "Bearer",
"expires_in": 3600,
"scope": ""
}