在iPhone应用程序中验证用户

Myr*_*ton 11 iphone authentication api

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

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

  1. 良好的用户体验:我们希望允许用户输入一次凭据,并且无限期地保持登录状态,直到他们明确注销.我会考虑OAuth,如果不是因为iPhone应用程序的体验非常糟糕,从我所听到的(即它在Safari中启动登录表单,然后告诉用户在身份验证成功时返回应用程序) .
  2. 无需在应用程序中存储用户信用:我总是讨厌将用户密码存储在纯文本中或在任何地方对称加密的想法,因此我不希望应用程序必须存储密码才能将密码传递给用于未来API请求的API.
  3. 安全性:我们绝对不需要银行应用程序的强大安全性,但我显然希望这是安全的.

总体而言,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表中删除记录.

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

And*_*iih 1

我同意 oAuth 的评论 - 你当然可以让 oAuth 在 iPhone 上很好地工作 - 用户体验完全取决于你。有一些机制(jQuery)可以从 oAuth 中提取 PIN 并使用它(无需用户在应用程序中重新输入 PIN)。这将用户体验降低到

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

这个 twitter oAuth 实现使用预先存在的 oAuth 库来实现http://github.com/bengotlieb/Twitter-OAuth-iPhone 。

然而,回到你原来的问题。看起来不错。您唯一没有提及的项目是,您需要在网络应用程序上提供一种机制,以允许用户注销/取消授权设备会话(以防他们丢失设备)。