【问题标题】:Help with iOS authentication using user token, rest/rails, and keychain使用用户令牌、rest/rails 和钥匙串帮助进行 iOS 身份验证
【发布时间】: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


【解决方案1】:

我们已经在 iOS 与 Rails 应用程序的连接中使用了这种方法,并且没有遇到任何问题。在您的 api 控制器中,只需有一个 before 过滤器,它会根据您的令牌找到您的用户,如果它无效则返回 401。

然后,您的移动设备知道它是否收到 401,然后显示登录屏幕以获取新的/有效的令牌。把它放在一个连接工厂里,你就可以开始了。

如果您想保持 URL 干净,也可以将其添加到标题中,但我对 URL 参数方法没有任何问题。

【讨论】:

  • 太好了,很高兴知道这是一种合理的方法。还有一个问题,您如何存储令牌以供以后安全检索?钥匙链是最合适的地方吗?谢谢!
  • 钥匙串确实是存储这类数据的最佳场所。 SSKeychain 让这一切变得非常简单。
【解决方案2】:

【讨论】:

  • 不错的链接,通过正常的谷歌搜索找不到。
猜你喜欢
  • 2013-05-23
  • 2014-12-17
  • 1970-01-01
  • 1970-01-01
  • 2019-05-18
  • 2010-12-14
  • 1970-01-01
  • 2020-12-25
  • 2018-12-15
相关资源
最近更新 更多