【发布时间】:2013-02-22 19:11:43
【问题描述】:
我知道这个问题以前曾以各种形式提出过。但是,我不是在寻找“使用 https”的答案。我已经在使用 HTTPS,我并不担心来回传输的有效负载的敏感性。
但是,我正在开发的 iPhone 应用程序正在与我构建的 REST API 通信(我可以控制应用程序和服务器 - 因此欢迎提出任何建议)。
我使用 OAuth2 协议进行身份验证,这意味着我的“API 密钥”是客户端 ID 和客户端密钥的组合,仅需要传输以获取access_token。之后,所有请求都使用access_token 和包含请求主体的 HMAC 的标头(使用客户端密钥作为密钥)发送到服务器。此添加的唯一原因是有人无法使用 access_token 发出 API 请求。
我正在与之交谈的 API 将在我发布应用程序时公开。所以我不必担心其他人能够对其进行 API 调用。
我关心的是:
- 人们能够使用我的应用程序的客户端凭据进行 API 调用(这意味着我无法在服务器端检测到它不是来自我的应用程序)
- 人们能够滥用我的客户端 ID 允许他们拥有的额外范围,而传统 API 用户将没有
我的猜测是这个问题并没有真正的解决方案(除了使用 UIWebView 和制作一个美化的 webapp),但我想我还是会在这里问。
如果客户端 ID/客户端机密需要被应用使用,你们能想出一种方法来保护它吗?
【问题讨论】:
-
您是说 oauth 对您的应用来说不够安全吗? oauth 客户端必须对所有参数进行签名,因此只有具有访问令牌和机密的客户端才能包含某些参数并正确签名。
-
@danh 实际上,OAuth2 不签署参数(这是 OAuth1 的一部分,它已经放弃了该规范)。但是不,我的意思是用相对较少的努力,有人可以对我的应用程序进行逆向工程并获取我的客户端 ID 和机密,并作为我的应用程序针对 API 发出请求。
-
如果您可以(以某种方式)授予购买您的 iPhone 应用程序的任何人一个唯一标识符,您可以将其链接到单个用户的凭据。这样,您就可以将获得 iPhone 应用程序的客户端与从其他来源调用您的 API 的客户端区分开来。
标签: iphone security encryption