在iPhone应用程序中验证用户

时间:2010-05-15 17:59:49

标签: iphone api authentication

我正在为我们的Web应用程序开发HTTP API。最初,API的主要消费者将是我们正在开发的iPhone应用程序,但我正在考虑未来的用途(例如其他平台的移动应用程序)。我正在尝试确定用户身份验证的最佳方式,以便他们可以从iPhone访问自己的帐户。我有一个我认为运作良好的设计,但我不是安全专家,所以我认为在这里寻求反馈会很好。

用户身份验证的设计有3个主要目标:

  1. 良好的用户体验:我们希望允许用户输入一次凭据,并且无限期地保持登录状态,直到他们明确注销为止。我会考虑OAuth,如果不是因为iPhone应用程序的体验非常糟糕,从我所听到的(即它在Safari中启动登录表单,然后告诉用户在身份验证成功时返回应用程序)
  2. 无需存储用户对应用程序的信任:我总是讨厌将用户密码以纯文本或对称加密存储在任何地方的想法,所以我不希望应用程序必须存储密码才能将其传递给API以供将来的API请求使用。
  3. 安全性:我们绝对不需要银行应用程序的强大安全性,但我显然希望这是安全的。
  4. 总体而言,API受REST启发(即将URL视为资源,并在语义上使用HTTP方法和状态代码)。每个API请求都必须包含两个自定义HTTP标头:API密钥(每个客户端应用程序都是唯一的)和唯一的设备ID。 API要求使用HTTPS进行所有请求,以便对标头和正文进行加密。

    目前的策略:

    我的计划是在我的数据库中有一个 api_sessions表。它对API密钥和唯一设备ID具有唯一约束(因此设备可能只通过给定应用程序登录到单个用户帐户)以及users表的外键。

    API将具有登录端点,该端点接收用户名/密码,如果它们与帐户匹配,则记录用户,为给定的API密钥和设备ID创建api_sessions记录。未来的API请求将使用API​​密钥和设备ID查找api_session,如果找到记录,则将请求视为在api_session记录引用的用户帐户下登录。

    还会有一个注销 API端点,它会删除api_sessions表中的记录。

    有没有人在这看到任何明显的安全漏洞?

1 个答案:

答案 0 :(得分:1)

我同意oAuth的评论 - 你当然可以让oAuth在iPhone上运行得很好 - 用户体验完全取决于你。有一些机制(jQuery)可以从oAuth中撤回PIN并使用它(用户无需在应用程序中重新输入PIN)。这会将用户体验减少到

1)显示网页(嵌入式控制) 2)用户输入用户和密码并按下按钮 3)oAuth响应页面自动解析。

这个twitter oAuth implmentation使用预先存在的oAuth库做http://github.com/bengottlieb/Twitter-OAuth-iPhone

但是,回到原来的问题。看起来很好。您没有提及的唯一项目是,您需要在Web应用程序上提供一种机制,以允许用户注销/取消授权设备会话(如果他们丢失了设备)。