【问题标题】:Swift Authorization Header over SSLSSL 上的 Swift 授权标头
【发布时间】:2019-03-09 06:59:41
【问题描述】:

我已更新 API 以强制使用 SSL。现在,我的 swift/ios 应用程序因任何包含 Authorization 标头的调用而失败。只有登录和不安全的 api 调用作为测试有效。

如果我禁用 SSL,一切都会恢复正常。

我还验证了服务器与 fiddler 一起正常工作。

我觉得我遗漏了一些简单的东西,但我对答案的搜索目前是徒劳的。

我应该在 HTTPURLResponse 中添加 data 为 nil,response 为 nil 并且错误包含以下内容:

可选(错误域=NSPOSIXErrorDomain 代码=100“协议错误” UserInfo={NSErrorPeerAddressKey={长度=16,容量=16,字节= 0x100201bb36fc951f0000000000000000},_kCFStreamErrorCodeKey=100, _kCFStreamErrorDomainKey=1})

【问题讨论】:

  • 如果使用 URLSession 进行 API 调用,您可能需要实现正确的委托方法,特别是 func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition , URLCredential?) -> 无效)。请注意,这个特定的委托与 URLSessionTaskDelegate 有一个不同的变体。
  • 好的,我实现了 urlsessiondelegate,它确实命中了 didReceive 回调。我选择执行默认处理,这就是我认为默认情况下它所做的事情,我仍然得到相同的结果
  • 现在很明显它是一个 NSPOSIXErrorDomain,它可能是不同的问题。查看此链接。这几乎没有可能的解决方案。 stackoverflow.com/questions/41461481/…
  • 是的,我之前确实抓住了那个线程。我正在做一个简单的获取请求,所以没有正文。我尝试了一些不同的内容类型作为测试,但结果都一样:(

标签: ios swift ssl


【解决方案1】:

请尝试检查 HTTP 请求/响应正文,看看是否有一些格式错误的字段。例如,Content-Length 和 Content-Type 是正确的,或者缺少某些内容。

【讨论】:

  • 是的,我在另一个帖子中看到了这个建议,但没有运气。进一步的测试表明问题是 IIS 10 上的 swift 和 api 的组合。该应用程序适用于 IIS 8,而提琴手适用于 IIS 10。发生错误时,IIS 日志文件中似乎没有任何内容。我正在拔头发。
【解决方案2】:

您的呼叫可能已被应用传输安全性阻止。 尝试将以下项目添加到您的 .plist 文件中:

<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>mydomain.net</key> <dict> <key>NSExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSIncludesSubdomains</key> <true/> <key>NSExceptionRequiresForwardSecrecy</key> <false/> </dict> </dict> </dict>

【讨论】:

  • 我已经设置了其中一些项目,但不幸的是尝试了你的相同结果:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-29
  • 2016-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多