【发布时间】:2010-02-23 19:08:54
【问题描述】:
我是 Web 和移动开发的新手,尤其是安全方面的新手,所以我仍然很欣赏显而易见的答案。
我希望我的 android 应用能够使用用户名和密码登录到简单的网络服务。
安全发送此信息并让用户在整个会话期间保持登录状态的最佳方式是什么?
【问题讨论】:
标签: android web-services security authentication
我是 Web 和移动开发的新手,尤其是安全方面的新手,所以我仍然很欣赏显而易见的答案。
我希望我的 android 应用能够使用用户名和密码登录到简单的网络服务。
安全发送此信息并让用户在整个会话期间保持登录状态的最佳方式是什么?
【问题讨论】:
标签: android web-services security authentication
您控制网络服务吗?如果不是,那么您将需要使用 Web 服务提供的任何身份验证机制。
如果您自己编写 Web 服务,您有很多选择。
最简单的方法是通过 SSL 发送用户的用户名和密码,并将每个请求作为 HTTP Authorization: 标头。这里的缺点是您需要将用户名和密码保存在设备上。话虽如此,由于 Android 权限系统的工作方式,只要用户未启用 root 访问权限,攻击者从设备窃取凭据的风险很小。
如果您仍想避免以纯文本形式存储密码,您可以发送一次用户名/密码(再次使用 SSL),让服务器返回一个加密的授权令牌,然后发送该令牌代替用户的用户名/密码。有关此示例,请参阅 Google 的 ClientLogin。如果攻击者可以物理访问设备,他们仍然可以窃取令牌,但至少攻击者不能使用它来访问使用相同密码的任何其他网站。
还有其他选项,例如使用质询/响应来防止服务器查看用户密码,使用 OAuth 提供通用授权 API 等等。这完全取决于您的特定要求。
【讨论】:
我和一个朋友正在寻找做同样的事情,我认为我们已经决定在设备上存储一个用户唯一的网络服务密钥,并将其用于身份验证而不是存储 un/pw(这个是上面 Trevor 提供的第二种方法)。您还需要确保提供一种方法将该密钥也放入设备中。
【讨论】:
您可以使用基于服务器的随机密钥和基于本地 imie 的密钥以及用户唯一令牌来制定逻辑。您可以为每个密钥设置到期时间
【讨论】: