iOS 应用:服务器在 20 分钟后超时的身份验证.这正常吗,我该如何处理



我在做什么

我正在使用一组提供给我的私有 API 构建企业应用程序。不幸的是,在 20 分钟不活动后,我从对服务器的后续调用中收到 401 个未经授权的响应,直到我注销应用程序并再次登录(或者更具体地说,直到我再次使用用户名和密码调用登录 API(。


我尝试过什么

  • 10 分钟左右调用一次登录 API。这似乎有效,但它很丑陋,而且似乎不那么可靠(仍然从 beta 测试人员那里收到 401 错误的报告(。

  • 对于我发出的每个 Web 请求,我都可以检查 401,然后适当地处理并重新发出相同的请求。它工作正常,但它很丑陋,有很多重复的代码(每个请求处理程序的复制粘贴......(,而且总的来说只是糟糕的风格。

  • 使用 NSURLSession 的会话级别质询处理程序委托方法。这会在 NSURLAuthenticationMethodServerTrust 类型的初始登录 API 调用中收到质询,我使用从 challenge.protectionSpace.serverTrust 创建的凭据来响应该质询。此挑战成功,应用程序运行良好。处于非活动状态 20 分钟后,进行的下一次 API 调用将再次触发此委托方法。我以同样的方式回应,该方法只调用一次,没有挑战.previousFailureCount 或任何东西,所以一切似乎都很好......但请求返回 401。

  • 使用 NSURLSession 的任务级别质询处理程序委托方法。这比会话级别委托更频繁地调用,但它会产生相同的结果。起初很好,但在 20 分钟不活动后,我以相同的方式响应它,并且返回一个 401,没有任何警告,例如召回的质询处理程序,previousFailureCount 大于 0。

  • 从任务或会话级别质询处理程序委托方法调用登录 API。这有几个问题:从会话级别的委托中,我无法判断质询是从登录 API 本身调用的(在这种情况下,我们不想调用登录 API(还是从其他 API(在这种情况下,我们希望调用(。也没有办法回忆起失败的原始NSURLRequest。从任务级别委托 - 它可以工作,因为我可以暂停任务,直到发生重新身份验证,并且仅在任务的请求不是针对登录 API 时才调用登录 API。但是 - 这被调用太多了 - 例如,它在应用程序启动期间被调用了大约 20 次。这是非常丑陋和低效的。


我想知道的

  • 什么是正常的?服务器行为是否正常,我是否在如何处理这个问题方面遗漏了一些东西?或者 - 服务器是否异常,我可以向客户端建议一个简单的解决方案吗?

  • 有没有一种干净的方法来处理iOS中的这种身份验证设置?

  • 在我的情况下,你会怎么做?

在我的情况下,你会怎么做?

修复该死的服务器,就是这样。或者找到可以修复它的人并让他们修复它。您有多种解决方法,但它们都围绕着一个可以一劳永逸地解决的问题。找出谁负责服务器并让他们修复它。

最新更新