我知道这是一种流行的问题类型,但我找不到任何其他可以满足我特定需求的问题。
背景
- 我有一个 iOS 应用程序,可以从我的 Ruby on Rails 开发的 Web API 中检索数据。
- 我想将我的 API 私有化,以便其他来源无法使用来自我的 API 的数据(即,其他人开发了一个应用程序来访问我的 API url 并将数据用于他们的客户)
要求
- (硬)私有 API,以便只有授权客户端(仅来自 iOS 应用程序)才能访问来自 API 的数据。
- (困难)用户不必创建用户/密码帐户。
- (软)我读到 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,以数据和 NEW TOKEN 响应
- iOS 获取数据并在本地保存 NEW TOKEN
- 无限期重复步骤 5-7
这些想法的问题
我相信 iOS 不再有完美的 UUID 解决方案。如果 UUID 可以随时间变化(或者如果用户有多个 iOS 设备),则可能会出现身份验证问题。
如果黑客获得了 API 密钥,我不希望他们能够访问数据(因此产生了过期或新令牌的想法)。
问题
您对在 Rails 和 iOS 之间创建安全 API 有什么建议?
编辑1:
我仍然很惊讶这不是一直出现的事情。必须有大量的应用程序与 API 通信,但不强制用户注册。如果 SSL 或 OAuth 是唯一合适的解决方案,请辩护。我全是耳朵。