使用用户令牌,休息/电子轨和钥匙串帮助进行iOS身份验证

rph*_*ath 17 iphone ruby-on-rails objective-c ios

我有一个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
Run Code Online (Sandbox Code Playgroud)

这听起来像是一种合理的方法吗?或者他们的担忧我不知道这种方法?我一直在做Rails工作很长一段时间,但我对iOS比较陌生(我只有1个应用程序,它不需要任何身份验证).

如果这是一个很好的方法,是否难以使用钥匙串?我想我读过模拟器和设备本身不支持用于钥匙串访问的相同API?(或者模拟器可能不支持模拟钥匙串访问)

提前致谢.我尝试搜索较旧的帖子,但似乎没有人回答我的具体情况.

Jes*_*ott 7

我们使用这种方法与iOS连接Rails应用程序,并没有任何问题.在您的api控制器中,只需要一个基于您的令牌找到您的用户的前置过滤器,如果它无效则返回401.

然后,您的移动设备知道它是否收到401,然后显示登录屏幕以获取新的/有效的令牌.把它放在一个连接工厂,你会很高兴.

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

  • 太棒了,很高兴知道这是一种合理的方法.还有一个问题,您是如何存储令牌以便以后进行安全检索的?钥匙串是最合适的地方吗?谢谢! (2认同)