Oauth1 iOS从API获取数据

时间:2017-03-08 04:25:23

标签: ios swift oauth

如何使用Oauth1从API获取数据?我只是尝试过这样但是没有用。

import UIKit
import OAuthSwift

class TestLogin: UIViewController {

var oauthswift: OAuthSwift?
final let urlString = "https://conversation.8villages.com/1.0/contents/articles"


override func viewDidLoad() {
    super.viewDidLoad()

    self.doOAuth()
}


func doOAuth()
{


    let oauthswift = OAuth1Swift(
        consumerKey:    "******",
        consumerSecret: "******",
        requestTokenUrl: "https://oauth.8villages.com/tokens/request-token",
        authorizeUrl:    "https://accounts.8villages.com/oauth/request-token",
        accessTokenUrl:  "https://accounts.8villages.com/oauth/access-token"
    )


    oauthswift.authorize(
        withCallbackURL: URL(string: "https://8villages.com")!,
        success: { credential, response, parameters in
            print(credential.oauthToken)
            print(credential.oauthTokenSecret)
            print(parameters["userId"])
    },
        failure: { error in
            print(error.localizedDescription)
    }             
    )
}

func getHandleURL () {
    let url = NSURL(string: urlString)
    URLSession.shared.dataTask(with: (url as? URL)!, completionHandler: { (data, response, error) -> Void in

        if let jsonObj = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? NSDictionary {

            print(jsonObj!.value(forKey: "data"))

        }

    }).resume()
}

}

那么,我该怎么办?或者我需要一个参考示例从API获取带有Oauth1的数据?我只是不知道如何开始使用OAuth构建项目,因为我在谷歌搜索,只有教程OAuth用于登录社交媒体。

1 个答案:

答案 0 :(得分:2)

为了发送oAuth 1.0请求基本上你需要根据你的服务器实现计算正确的查询字符串和body参数。

您需要获得以下查询参数:

  • oauth_consumer_key
  • oauth_nonce
  • oauth_signature_method
  • oauth_timestamp
  • oauth_version

您可以查看this blog所有参数的详细解释以及签名过程。另外this answer指导您如何在iOS中创建HMAC-SHA1签名

在此过程结束时,您需要根据您的应用和服务器都同意的签名方法创建签名。

然后示例POST请求应如下所示:哪个取自oAuth1 guide

POST /wp-json/wp/v2/posts
Host: example.com
Authorization: OAuth
               oauth_consumer_key="key"
               oauth_token="token"
               oauth_signature_method="HMAC-SHA1"
               oauth_timestamp="123456789",
               oauth_nonce="nonce",
               oauth_signature="..."

{
    "title": "Hello World!"
}

希望它有所帮助。