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> 。 签名不是必需的。