2016-02-12 131 views
2

我向我的应用程序添加了生产证书,它运行良好。但是现在我想在进行任何API调用之前验证身份。我希望能够在使用用户名和密码进行POST之前验证服务器。这样我可以预先防止用户。在发出任何请求之前验证服务器身份

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

回答

1

我想你所问的问题是:“AFNetworking是否有内置的自动检测和验证代码?”,答案是“据我所知,没有。”这就让你看到手动选项,就像你在你的问题中指出的那样。

浮现在脑海中的一些选项:

如果您的服务器和服务器端应用程序支持它,你可以做一个HEADOPTIONS HTTPS请求验证发布数据之前服务器的安全连接。请注意,它会增加网络流量,因此在慢速网络连接时,它可能会给用户体验增加可感知的延迟。您可以通过缓存结果并在后台不时执行网络检查来缓解此问题。这些请求/响应对话所需的带宽非常小,因为它们通常只发送HTTP标头,而不是有效负载。

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

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

如果没有这样做,您当然可以按照您的建议做 - 请服务器应用程序创建一个公开的ping端点,该端点响应HTTP GET请求,并使用小的(或无)有效负载和同意的HTTP响应成功(200 OK是常见的)。这通常用于健康检查,并且还具有让用户在发出请求之前警告用户服务器报告健康问题(无论安全连接是否有效)的额外好处。

+0

我最喜欢的方法是没有任何新的服务器要求。你指出了非常好的解决方案,绝对听起来像是正确和明确的方法。现在我正在做的只是向主机发送一个请求,没有结束点,没有头,就是这样。它似乎工作。你看到有什么问题吗?我知道这是一个非常天真的方法,我不是安全专家。 – mdonati

+0

虽然'/'端点的安全性与您使用的任何API端点的安全性可能不同,但当您提出真正的请求时,您会发现它。更大的问题是您正在向'/'端点发出请求(并从中检索数据)。例如,如果'/'返回代表该网站主页的大型HTML文档,那么这可能是一个昂贵的操作。它可能工作,但它会扩展吗?它在低带宽环境中执行吗?我不建议使用任何方法,无论您或我建议不联系服务所有者。 – Palpatim

+0

你在那里做得非常好。我会请求服务器添加这样的方法。这是应用程序如何工作的一般?我想知道这里有什么最佳实践。 – mdonati