twitter登录时的身份验证错误

时间:2016-10-19 05:32:20

标签: objective-c swift oauth swift3 twitter-oauth

我使用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授权中使用它时,它可以工作。我不明白如何在标题中使用“消费者密钥”。

1 个答案:

答案 0 :(得分:1)

您不需要oauth 1.0的Consumer Secret,这是您在代码中尝试执行的操作(仅适用于oauth 2)。

这个问题很可能围绕着你正在创建的oauth签名,因为这是非常复杂和棘手的。

确保您按照here概述的所有步骤创建签名库。还要记住将您的使用者密钥转换为utf8,然后对其进行base64编码。