如何将用户身份验证放入移动应用程序

时间:2012-01-21 16:22:49

标签: android iphone authentication mobile

我对在移动应用中进行用户身份验证的最佳方式感兴趣。目前设置非常简单。我在应用程序上存储用户名和密码,并在每次需要运行受限查询时将其发送到api。

我觉得这可能是错误的做法。

当用户登录然后存储该用户的ID时,更好的方法是发送用户名和密码吗?这个问题是api接受用户ID而不是用户名和密码。用户ID将更容易“猜测”,恶意用户可以通过随机选择的用户ID在其帐户下执行操作向api提交请求。我有一个api密钥。这样安全吗?

问题是我想开始将twitter和facebook oauth整合到应用程序中。我没有读太多关于它的内容,但我认为你得到了一个“令牌”。如何使用您建议的设置?在我自己的用户数据库中创建令牌并使用令牌(无论是我的,Facebook还是推特)作为授权会有好处吗?或者将每项服务分开并单独处理它们是否有意义?

谢谢。

1 个答案:

答案 0 :(得分:10)

正确的方法是在用户登录时在服务器上生成身份验证令牌,并在登录回复中发送此令牌。然后,此令牌用于后续请求。

这意味着服务器必须跟踪它生成的身份验证令牌。您还可以跟踪令牌创建时间,并在一段时间后使令牌过期。

令牌必须是足够长的随机字符串,因此无法轻易猜到。如何做到这一点之前得到了回答:How to generate a random alpha-numeric string?

我个人更喜欢UUID方法。

<强>更新

此问题已在网络浏览器中通过Cookie和会话解决。您可以在Android请求中重用此机制(尽管一些REST纯粹主义者反驳了这种方法):

  1. 在服务器上启用会话。

  2. 当用户登录服务器时,会向会话添加一些数据,例如登录时间:

    request.getSession().setAttribute("timeOfLogin", System.currentTimeMillis());
    
  3. 由于会话已启用,您还需要在HttpClient请求中启用Cookie支持:Using Cookies across Activities when using HttpClient

  4. 每次发出请求时,服务器都应检查会话是否包含timeOfLogin属性。否则它应该返回HTTP 401回复。

  5. 当用户注销时,请调用服务器注销URL并清除客户端上的cookie。