我知道这个问题以前曾以各种形式提出过。但是,我不是在寻找“使用 https”的答案。我已经在使用 HTTPS,而且我并不担心来回传输的有效负载的敏感性。
但是,我正在开发的 iPhone 应用程序正在与我构建的 REST API 通信(我可以控制应用程序和服务器 - 因此欢迎提出任何建议)。
我使用 OAuth2 协议进行身份验证,这意味着我的“API 密钥”是 Client ID 和 Client Secret 的组合,只需传输即可获取access_token
. 之后,所有请求都使用 和包含请求主体的 HMAC 的标头发送到服务器access_token
(使用客户端密钥作为密钥)。这种添加的唯一原因是有人无法使用 JUST 发出 API 请求access_token
。
当我发布应用程序时,我正在与之交谈的 API 将被公开。所以我不一定担心其他人能够对其进行 API 调用。
我关心的是:
- 人们能够使用我的应用程序的客户端凭据进行 API 调用(这意味着我无法在服务器端检测到它不是来自我的应用程序)
- 人们能够滥用我的客户端 ID 允许他们拥有的额外范围,而传统 API 用户将不会拥有
我的猜测是这个问题并没有真正的解决方案(除了使用 UIWebView 和制作一个美化的 webapp),但我想我还是会在这里问。
如果应用程序需要使用客户端 ID/客户端密码,你们能想出一种方法来保护它吗?