我使用Twitter Rest APis面临一些身份验证错误。虽然它正在Postman.On邮递员有一个选项,在授权中添加消费者秘密,但我不明白在我的URLRequest中将该密钥放在何处。我使用与Postman相同的代码片段,但在我的应用程序端,我面临auth错误。
let requestTokenURL = URL(string:"https://api.twitter.com/oauth/request_token")
let consumerKey = "xxxxxxxxxxxxxxxxxxxxxx"
let consumerSecretKey = "xxxxxxxxxxxxxxxxx"
let signatureMethod = "HMAC-SHA1"
let signature = "hgjhagdAGFSSAJKaqhsugqggqskugkg"
let timestamp = String(Date().timeIntervalSince1970)
let nonce = UUID().uuidString
let version = "1.0"
class TwitterHelper{
func getAuthToken(){
let session = URLSession.shared
let info = [["OAuth oauth_consumer_key":consumerKey],
["oauth_signature_method":signatureMethod],
["oauth_timestamp":timestamp],
["oauth_nonce":nonce],
["oauth_version":"1.0"],
["oauth_signature":signature]
]
var formattedString = ""
for case let authData in info {
for (key,value) in authData{
formattedString += key + "=" + (value) + ","
}
}
let headers = [
"content-type": "application/x-www-form-urlencoded",
"Authorization":formattedString
]
var request = URLRequest(url: requestTokenURL!, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
session.dataTask(with: request) { (data, response, error) in
if let parsedData = parseJsonData(data: data){
print(parsedData)
}
}.resume()
}
}
响应:
{
code = 32;
message = "Could not authenticate you.";
}
这是由于消费者的密钥。在Twitter文档中,它没有定义使用,但是当我在Postman授权中使用它时,它可以工作。我不明白如何在标题中使用“消费者密钥”。
答案 0 :(得分:1)
您不需要oauth 1.0的Consumer Secret,这是您在代码中尝试执行的操作(仅适用于oauth 2)。
这个问题很可能围绕着你正在创建的oauth签名,因为这是非常复杂和棘手的。
确保您按照here概述的所有步骤创建签名库。还要记住将您的使用者密钥转换为utf8,然后对其进行base64编码。