如何使用远程Web应用程序对iOS/iPhone用户进行身份验证,并在将来对同一Web应用程序的请求中重新使用身份验证票据?

wgp*_*ubs 18 iphone authentication objective-c ios ruby-on-rails-3

我正在构建一个iOS应用程序,我需要能够为Rails 3应用程序提供针对各种数据的经过身份验证的请求.Rails 3应用程序使用omniauth和URL(如https://myapp.com/auth/facebook),例如,通过Facebook验证用户...一旦经过身份验证,将身份验证存储在名为"auth."的安全cookie中.

我想知道的是如何从iOS/iPhone应用程序验证我的用户,持久化身份验证令牌并将其与将来的请求一起发送到Rails应用程序?


使用ASIHTTPRequest我想做这样的事情:

  1. 打开一个UIWebview,从我的 Web应用程序中加载一个特定于他们想要进行身份验证的提供程序的URL (例如,用于facebook的myapp.com/auth/facebook或用于yahoo的myapp.com/auth/yahoo等等).

  2. 在成功时,以某种方式解析并将身份验证cookie存储在iOS应用程序中,而不显示通过网站进行身份验证时通常会看到的网页...而是关闭UIWebView并导航回iOS应用程序中的另一个UIVewController.

  3. 以某种方式包含持久性身份验证令牌以及未来对Rails应用程序的Web请求.

  4. 我还想允许用户允许iOS应用程序在本地存储此信息,这样他们就不必重新登录到远程应用程序.


这种方法是否合适?有没有更好的办法?当然,如何实际实现上述目标?

谢谢 - wg

Arm*_*and 0

好的,我们开始吧,我不知道您的 Web 服务的确切设置等等,但您可以做的是使用 SQLite 或 Core Data 将身份验证令牌存储在设备上,我目前正在开发一个需要身份验证的应用程序,并且我所做的是将用户名和密码本地存储在设备上的 SQLite 数据库中,使用 Core Data 与数据库进行交互,然后每当我进行 API 调用时,我都会使用存储的用户名和密码在服务器端使用 gets 进行身份验证,但我相信使用post是更省钱的方式,只要网络服务器具有很好的安全性,我不认为存在任何安全风险。根据我对您正在构建的内容的了解,我将在第一次启动时对用户进行身份验证,并让用户能够在稍后阶段更改登录凭据,但在身份验证后,我会将身份验证令牌发送回设备并存储该令牌在数据库中,然后每当我需要使用 Web 服务进行身份验证时,我都会将身份验证令牌与发布请求发送到服务器。这有道理吗?