【发布时间】:2013-01-05 07:18:27
【问题描述】:
我知道这是一种很受欢迎的问题,但我找不到任何其他可以满足我特定需求的问题。
背景
- 我有一个 iOS 应用程序,它从我的 Ruby on Rails 开发的 Web API 中检索数据。
- 我想将我的 API 私有化,以便其他来源无法使用来自我的 API 的数据(即,其他人开发了一个应用程序,该应用程序访问了我的 API 网址并将数据用于他们的客户)
要求
- (硬)私有 API,以便只有授权客户端(仅来自 iOS 应用程序)才能访问 API 中的数据。
- (困难)用户不必创建用户/密码帐户。
- (SOFT) 我读到 SSL 在尝试获得 Apple 批准的应用程序时可能会成为一场噩梦。由于这是一个小型应用程序(截至目前),我更愿意不依赖 SSL。 但是,如果您能指出我在 iOS 上使用 SSL 处理所有 API 流量轻松的正确方向,我会全力以赴)。
! 如果您失去兴趣,请跳到问题的最后 :)!
到目前为止的想法
想法 1:
- iOS 从 Web 请求令牌,发送一些 UUID
- WEB 响应 API_Token 和 Token_Expiry
- WEB 将 UUID、API_Token 和 Token_Expiry 存储在数据库中
- iOS 将 API_Token、Token_Expiry 存储在本地
- iOS 通过发送 UUID 和 API_Token 请求数据
- WEB 验证 UUID 和 API_Token,响应数据
- 重复步骤 5-6 直到 API_Token 过期,然后从步骤 1 开始重复
*想法2:(单次使用API_Token)*
- iOS 从 Web 请求令牌,发送一些 UUID
- WEB 使用 API_Token 响应
- WEB 将 UUID 和 API_Token 存储在数据库中
- iOS 将 API_Token 存储在本地
- iOS 通过发送 UUID 和 API_Token 请求数据
- WEB 验证 UUID 和 API_Token,以数据和新令牌响应
- iOS 获取数据并在本地保存 NEW TOKEN
- 无限期地重复步骤 5-7
这些想法的问题
我相信 iOS 不再有完美的 UUID 解决方案。如果 UUID 可以随时间变化(或者如果用户有多个 iOS 设备),则可能会出现身份验证问题。
如果黑客获得 API 密钥,我不希望他们能够访问数据(因此产生了过期或新令牌的想法)。
问题
对于在 Rails 和 iOS 之间创建安全 API,您有什么建议?
编辑 1:
我仍然很惊讶这不是一直出现的事情。必须有大量的应用程序与 API 通信,但不强制用户注册。如果 SSL 或 OAuth 是唯一的正确解决方案,请辩护。我全神贯注。
【问题讨论】:
-
AFAIK,如果没有一些容易出错的 iCloud 杂技,就无法跨设备跟踪用户,有人可能会纠正我。至于保护您的 API,请使用长令牌挑战客户端并让它返回由秘密函数生成的哈希。不完美,但也许足够好。
-
@s.bandara 因为我对以这种方式保护事物非常陌生,您能否指出我可以跟进或进一步解释的链接?如果我挑战每个客户端(我的 iOS 应用程序),我是否需要通过 1. 请求数据、获取令牌、发送哈希、然后获取数据(4 次)来“打开通信线路”?
标签: ios objective-c ruby-on-rails api