Twitter应用程序专用authentication总是返回401
我试图使用应用程序唯一身份validation,我成功获取不记名的令牌,但是当我试图打电话给REST API时,我总是得到一个401错误,这是我的代码:
private var accessToken: String? private let consumerKey = "*********" private let consumerSecret = "*********" private let baseUrlString = "https://api.twitter.com/1.1/" private let pageSize = 20 private func authenticate(completionBlock: Void -> ()) { if accessToken != nil { completionBlock() } let credentials = "\(consumerKey):\(consumerSecret)" let headers = ["Authorization": "Basic \(credentials.getBase64())"] let params: [String : AnyObject] = ["grant_type": "client_credentials"] Alamofire.request(.POST, "https://api.twitter.com/oauth2/token", headers: headers, parameters: params) .responseJSON { response in if let JSON = response.result.value { self.accessToken = JSON.objectForKey("access_token") as? String completionBlock() } } } func getTimelineForScreenName(screenName: String) { authenticate { guard let token = self.accessToken else { // TODO: Show authentication error return } let headers = ["Authorization": "Bearer \(token.getBase64())"] let params: [String : AnyObject] = [ "screen_name" : screenName, "count": self.pageSize ] Alamofire.request(.GET, self.baseUrlString + "statuses/user_timeline.json", headers: headers, parameters: params) .responseJSON { response in print(response.response) if let JSON = response.result.value { print(JSON) } } } }
…
private extension String { func getBase64() -> String { let credentialData = self.dataUsingEncoding(NSUTF8StringEncoding)! return credentialData.base64EncodedStringWithOptions([]) } }
我已经尝试生成新的密钥,但没有什么,也尝试了什么build议在iOS 9中发现这个错误不让Authorization
头传递redirect,但这个请求是不使用任何redirect。
任何想法将不胜感激。
经过几个小时的调查,我发现侥幸的持票人标记不应被编码为base64,所以头应该是这样的:
let headers = ["Authorization": "Bearer \(token)"]
。
我希望这可以帮助任何人尝试类似的,因为文档说你必须使用base64编码的令牌。
步骤3:使用不记名令牌validationAPI请求
不记名令牌可用于向支持仅应用程序authentication的API端点发出请求。 要使用不记名令牌,请构build一个正常的HTTPS请求,并包含一个授权标头,其<base64 bearer token value from step 2>
的承载<base64 bearer token value from step 2>
。 签名不是必需的。
- 是否有必要使用谷歌应用程序帐户来使用Google+域API?
- 麻烦处理GoogleloginSwift 3
- Google跨客户端身份validation是否可以在iOS上使用,如果是这样的话,如何?
- linkedin连接API给错误401 – iphone
- 无法从iOS OAuth1.0,OAC消费者客户端的tumblr上发布
- Google Plus使用UIWebViewloginiOS
- oauth 2.0 webview ios sdk
- 优步无效的OAuth 2.0凭据提供Uber身份validation在iOS Swift中
- 如何在Visual Studio 2015中设置OAuth以使用Google身份验证