Ios 在发出任何请求之前验证服务器标识

Ios 在发出任何请求之前验证服务器标识,ios,ssl-certificate,afnetworking-2,Ios,Ssl Certificate,Afnetworking 2,我在我的应用程序中添加了生产证书,效果很好。但是现在我想在进行任何API调用之前验证身份。我希望能够在使用用户名和密码发布帖子之前验证服务器。这样我可以事先阻止用户 有没有办法做到这一点,或者我应该请求服务器创建一个仅用于此目的的公共方法?我认为您要问的问题是:“AFNetworking是否内置了任何自动检测和验证代码?”,答案是“据我所知,没有”。这让您只能选择手动选项,正如你在问题中指出的那样 我想到的一些选择: 如果您的服务器和服务器端应用程序支持它,您可以在向服务器发布数据之前发出HEA

我在我的应用程序中添加了生产证书,效果很好。但是现在我想在进行任何API调用之前验证身份。我希望能够在使用用户名和密码发布帖子之前验证服务器。这样我可以事先阻止用户


有没有办法做到这一点,或者我应该请求服务器创建一个仅用于此目的的公共方法?

我认为您要问的问题是:“AFNetworking是否内置了任何自动检测和验证代码?”,答案是“据我所知,没有”。这让您只能选择手动选项,正如你在问题中指出的那样

我想到的一些选择:

如果您的服务器和服务器端应用程序支持它,您可以在向服务器发布数据之前发出
HEAD
OPTIONS
HTTPS请求以验证服务器的安全连接。请注意,它会增加网络流量,因此在网络连接速度较慢时,它可能会给用户体验带来明显的延迟。您可以通过缓存结果和不时在后台执行网络检查来缓解这种情况。这些请求/响应会话所需的带宽非常小,因为它们通常只发送HTTP头,而不发送有效负载

这里棘手的部分是“如果您的服务器和服务器端应用程序支持它”。这两种方法都应该得到现代服务器平台的支持,但必须将应用程序端点配置为适当地响应这些方法。(也就是说,可以将服务器应用程序配置为仅响应POST请求,并拒绝所有其他请求。)

唯一确定的方法是尝试,但请确保您协调此方法的使用,以确保您的服务器团队知道这是您需要的用例。否则,您将面临使用未记录方法的风险,将来有人会关闭该方法,因为他们不知道有人在使用它


如果做不到这一点,您当然可以按照您的建议去做——要求服务器应用程序创建一个公共
ping
端点,该端点以较小(或无)负载响应HTTP GET请求,并获得一致的HTTP响应以获得成功(200 OK是常见的)。这通常用于运行状况检查,另外还有一个好处,即在发出请求之前,您可以提醒用户服务器正在报告运行状况问题(无论安全连接的有效性如何)。

我的首选方法是不需要任何新的服务器要求。你指出了非常好的解决方案,而且听起来确实是正确和明确的解决方法。现在我所做的只是向主机发送一个请求,没有端点,没有头,就这样。它似乎起作用了。你觉得这有什么问题吗?我知道这是一种非常幼稚的方法,而且我不是安全专家。
/
端点的安全性可能与您正在使用的任何API端点不同,但在发出真正的请求时,您会发现这一点。更大的问题是您正在向
/
端点发出请求(并从中检索数据)。例如,如果
/
返回一个表示站点主页的大型HTML文档,那么这可能是一个昂贵的操作。它可能会工作,但它会扩展吗?它是否在低带宽环境中运行?我不建议在没有联系服务所有者的情况下使用您或我建议的任何方法。您在这方面做得非常好。我将请求服务器添加这样一个方法。这就是应用程序通常的工作方式吗?我想知道这里的最佳实践是什么。根据我的经验,在请求之前验证安全性是不寻常的,因为SSL信任链问题的发生频率相对较低——失败更可能代表代码中的错误。:)我甚至可以说,对于我能想到的几乎每一个用例来说,这项工作都是不值得的,但是如果您处理的是一个极其敏感的数据集,或者是一个您不信任的服务器,那么这对您来说可能是值得的。