【发布时间】:2011-10-15 13:16:13
【问题描述】:
我目前正在为我的教会构建一个数据库应用程序,它处理一些相当敏感的数据..
该应用是用 ruby on rails 编写的,
我们还希望通过 iPhone 应用对其进行扩展。
我目前正在尝试寻找验证 iPhone 应用用户身份的最佳解决方案,这是我想出的一个解决方案:
iPhone 应用程序发出一个握手请求(通过 SSL),该请求返回一个 JSON 字符串,其中包含 2 个值:api_key 和 api_secret。
任何后续请求都附加了 2 个额外的参数 api_key 和 api_signature api_signature 基本上是与用户电子邮件一起散列的 api_secret 以掩盖秘密。
rails 应用程序通过将 api_secret 和用户电子邮件哈希在一起并将其与传入的签名进行比较来验证签名。
应用获取它的数据 :-)
api_secret 失效并每 2 小时重新创建一次(因此,如果黑客掌握了它,他们将只有 2 小时内的有效密钥..)
和我想的一样聪明.. 我看到了一个非常明显的场景:
如果黑客无论如何都掌握了 api_key 和 api_signature 怎么办..
如果他们将他们的请求附加到他们所在的那些参数中,那么我所有的困惑有什么意义呢?
您将如何更好地实现这一点?
非常感谢!
【问题讨论】:
-
这个“握手请求”涉及什么?用户最初是如何进行身份验证的?
-
哪一端发送api_key和api_secret?只有每个用户的数据是电子邮件地址吗?
-
基本上只是对我的会话控制器上登录操作的标准 POST 请求...然后生成这两个值(api_key 和 api_secret).. 不完全是如何,可能只会生成一个随机数和使用 MD5 散列它
-
或者哈希用户的电子邮件时间..也许?
-
所有请求都可以通过 SSL 进行,还是必须以明文形式传输其中一些请求?如果整个对话是通过 SSL 进行的,那么您可以生成一个会话令牌(它只是一个来回传递的随机值),或者您甚至可以在每个请求中发送用户名和密码(例如 HTTP 基本身份验证) .
标签: objective-c ruby-on-rails api authentication rest