【发布时间】:2010-12-18 19:42:55
【问题描述】:
我有一个 Rails 应用程序(不相关,我知道),我想针对 Rails 应用程序对 iOS 应用程序进行身份验证,并保持身份验证,以便以后对 Rails API 的请求无需重新验证每个请求即可工作。从概念上讲,这就是我想要做的……不过,我不确定这是否是最好的方法。
好的,所以在我的 Rails 应用程序中,每个用户都有一个唯一的令牌(SHA1 哈希)。我在想第一次加载 iPhone 应用程序时,用户会看到一个用户名/密码屏幕。他们会为 Rails 应用程序输入他们的凭据,并且在成功验证后,Rails 应用程序会返回他们唯一的用户令牌,然后可以将其存储在钥匙串中?从那以后,我想我可以简单地将用户令牌附加到所有 API 请求,这就是我可以在 Rails 应用程序中验证用户的方式。这也将保持用户名/密码独立于 iPhone 应用程序(因此用户可以在 Rails 应用程序中更改他们的用户名/密码,但 iPhone 应用程序不会关心这一点,因为它将使用他们的令牌,这不会改变)。
我认为我的 URL 请求可能看起来像这样:
http://example.com/api/v1/[whatever].json?token=XXXXXXXXXXXXXXX
这听起来像是一种合理的方法吗?还是我不知道他们对这种方法的担忧?我从事 Rails 工作已经有很长时间了,但我对 iOS 还比较陌生(我只有 1 个应用程序,并且不需要任何身份验证)。
如果这是一个很好的方法,那么使用钥匙串很难吗?我想我读到模拟器和设备本身不支持相同的 API 用于钥匙串访问? (或者模拟器不支持模拟钥匙串访问)
提前致谢。我尝试搜索旧帖子,但似乎没有一个回答我的具体情况。
【问题讨论】:
-
嘿,伙计,只是想知道您是否最终找到了解决方案,我现在处于同样的情况并且有点卡住了。
-
我假设您只是输入 http 作为示例,但对于阅读问题/答案的其他人,如果您要在 API 请求中包含身份验证字符串,则需要使用 https或者任何人都可以只观看请求,然后窃取您的身份验证令牌。实现这一点的最佳方法可能是使用某种挑战-响应方法,每次启动应用程序时都会生成一个新的身份验证令牌。那么攻击者将只有一个有效时间为 X 分钟/小时的令牌,而不是可以创建令牌的挑战(又名私钥)。
标签: iphone ruby-on-rails objective-c ios