iOS - Alamofire v2 基本身份验证不起作用

Posted

技术标签:

【中文标题】iOS - Alamofire v2 基本身份验证不起作用【英文标题】:iOS - Alamofire v2 Basic Auth not working 【发布时间】:2015-09-21 06:19:55 【问题描述】:

所以我向 Bing Image Search 发送了一个基​​本的身份验证请求以获取一些图像数据,它工作得很好,直到我更新到我拥有的最新版本的 Alamofire (1.3 -> 2.0.2)这样做是因为 1.3 甚至无法与 XCode 7 兼容。

无论如何,这是我的代码:

let credentials = ":\(Settings.bingApiKey)"
let plainText = credentials.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
let base64 = plainText!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))

manager = Alamofire.Manager.sharedInstance
manager!.session.configuration.HTTPAdditionalHeaders = [
    "Authorization": "Basic \(base64)"
]

let url = NSURL(string: Settings.bingImageApi + "&Query=" + keyword + "&$top=15&$skip=" + String(skip))!

manager!
  .request(.POST, url, parameters: nil, encoding: .JSON)
  .responseJSON  request, response, result in
      ...

我得到了错误:

失败:错误域=NSCocoaErrorDomain 代码=3840“字符 0 周围的值无效。” UserInfo=NSDebugDescription=字符 0 周围的值无效。 不支持您提供的授权类型。仅支持 Basic 和 OAuth

【问题讨论】:

【参考方案1】:

我在从 Alamofire 1.x 迁移到 2.x 时遇到了同样的问题。

我发现的一种解决方法(并且有效)是在执行请求时传递标头:

let headers = ["Authorization": "Basic \(base64)"]
Alamofire.request(.POST, url, parameters: nil, encoding: .JSON, headers: headers)

有关更多信息,您可以查看documentation。

【讨论】:

感谢您的帮助!效果很好【参考方案2】:

请阅读这里http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/ “应用程序传输安全 (ATS) 允许应用程序在其 Info.plist 文件中添加一个声明,该文件指定它需要与其进行安全通信的域。ATS 可防止意外泄露,提供安全的默认行为,并且易于采用。您应该采用 ATS尽快,无论您是创建新应用还是更新现有应用。”

【讨论】:

【参考方案3】:

错误的第一部分是由于您在响应中没有收到有效的 JSON。您可以使用responseresponseDataresponseString 来帮助调试。

错误的第二部分是由于您设置标题的方式。创建会话配置后,您无法设置 Authorization 标头。您可以创建自己的会话配置和自己的Manager,也可以在request 中传递Authorization 标头。

【讨论】:

以上是关于iOS - Alamofire v2 基本身份验证不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 swift 5 中使用 alamofire 对登录到我的 iOS 应用程序的用户进行身份验证?

使用客户端证书与 Alamofire 进行身份验证

来自守护程序的错误响应:获取 https://nvcr.io/v2/:未授权:需要身份验证

Alamofire 5中未设置授权标头?

具有 Alamofire 下载功能的 JWT 身份验证

如何使用 Alamofire 上传具有身份验证的 MultipartFormData