2016-10-19 2 views
0

Я столкнулся с некоторой ошибкой аутентификации, используя Twitter Rest APis. Хотя он работает на Postman.On почтальон есть возможность добавить Consumer Secret в Авторизация, но я не понимаю, где положить этот ключ в свой URLRequest. Я использую тот же фрагмент кода, что и Postman, но на стороне моего приложения я сталкиваюсь с ошибкой auth.Ошибка аутентификации в twitter login

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."; 
} 

Это происходит из-за секретный ключ потребителя. В документации по твиттеру он не определен для использования, но когда я использую его в Postman Authorization, он работает. Я не понимаю, как использовать этот «секретный ключ потребителя» в заголовке.

ответ

1

Вы не нуждаетесь в Секрете потребителя для oauth 1.0, который вы пытаетесь сделать в своем коде (только для oauth 2).

Проблема, скорее всего, вокруг сигнатуры oauth, которую вы создаете, поскольку это довольно сложно и сложно сделать правильно.

Чтобы создать базу подписи, выполните следующие действия: here. Помните также, чтобы преобразовать ваш потребительский ключ в utf8, а затем base64 также закодировать его.

Смежные вопросы