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