【问题标题】:How to put user authentication into a mobile application如何将用户身份验证放入移动应用程序
【发布时间】:2012-01-21 16:22:48
【问题描述】:

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

我觉得这可能是错误的处理方式。

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

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

谢谢。

【问题讨论】:

    标签: android iphone authentication mobile


    【解决方案1】:

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

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

    Token 必须是足够长的随机字符串,这样不容易被猜到。如何做到这一点之前回答过: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并清除客户端的cookies。

    【讨论】:

    • 好的,所以生成一个令牌是要走的路。邪恶! :) 谢谢
    猜你喜欢
    • 2015-10-25
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多