如何为移动应用创建无密码登录

时间:2012-09-25 03:57:20

标签: android ios security token password-protection

我喜欢在移动应用和API之间建立某种无密码登录(假设我可以控制它们)。动机是必须登录对用户来说非常烦人并且存在安全风险(例如,用户将重用现有密码),我希望用户能够立即开始使用该应用程序。

我想知道是否有一些技术可行。例如:

  1. 在移动设备上生成随机登录名/密码,并将密码存储在钥匙串中。
  2. 使用此登录名/密码组合使用API​​注册。这会返回一个令牌。
  3. 令牌用于后续调用
  4. 缺点是:

    • 如果用户删除应用程序,登录/密码可能会丢失(这可以通过使用iCloud存储登录来减轻 - 但这对密码有害吗?)
    • 密码存储在设备上(但它存在于钥匙串中)

    所以我的问题:这样的可行性和安全性足够吗?有没有已知的技术可以做到这一点?

2 个答案:

答案 0 :(得分:4)

这是我们做的:

基本上,这个想法非常类似于忘记密码"大多数服务提供:

  1. 要求用户提供电子邮件
  2. 发送包含激活链接的电子邮件。该电子邮件包含一个带有一次性令牌的深层链接,类似于myapp://login?token=.....
  3. 用户在安装了应用的设备上打开电子邮件 这对深层链接起作用至关重要,但无论如何,99%的案例都会发生这种情况。用户单击带有深层链接的按钮
  4. 用户被重定向回应用程序,您从应用程序的深层链接中提取令牌并将其发送到服务器API以进行身份​​验证。身份验证完成后,为用户创建会话,以便他们不再需要进行身份验证
  5. 好处:

    1. 更安全:用户无需考虑新密码(通常为too simple),也不存在用户重复使用密码的风险。对于我们作为开发人员,它提供的解决方案只有一个(而且简单!)的身份验证路径,更容易理解,从而保护。此外,我们不必触摸任何用户密码/哈希密码。
    2. 为用户提供更顺畅的入门流程:如果您在输入字段中预先输入电子邮件,则登录流程可以短至2个按钮点击并且他们已经进入。(除非您想要获取他们的名字/其他细节,但这也需要传统登录中的其他输入字段)
    3. 不太好:)

      1. 用户可能不会很好地使用此流程,并且可能想知道他们为什么不需要密码。我会添加一个小链接来解释"为什么我们不需要密码?"
      2. 如果删除应用或用户退出,则需要使用其电子邮件重新登录。对于移动应用程序来说,这不是一个问题,用户不会偶尔注销等等
      3. 我已经在我们的应用中实现了此流程,您可以在此处阅读更深入的解释: http://www.drzon.net/passwordless-login-in-mobile-apps/

        更多注意事项:

        • 为了使其更加安全,请使令牌仅可使用一次,并对其进行过期(如一小时)。您还可以通过向服务器发送某种类型的唯一设备ID以及电子邮件地址,将令牌绑定到特定设备。这样,用户无法简单地将电子邮件转发给其他人,而是将其打开(
        • 关于深层链接 - 我发现有些电子邮件提供商阻止使用自定义网址方案(如app://)的链接。解决此问题的方法是将链接指向服务器,然后将其重定向到实际的深层链接 https://myserver.com/login?token=... ---> myapp://login?token=...

        Mozilla也写了here

答案 1 :(得分:2)

这是非常开放的,但通常:不要重新发明轮子,使用标准解决方案,如OAuth和/或OpenID Connect(使用OAuth)。这样做的缺点是用户可能需要通过WebView或类似方式登录才能获得令牌,但您不必存储密码。

需要考虑的事项:

  • 你无法真正生成随机密码,因为服务器也需要知道它
  • Android没有类似公钥匙链的API,因此您必须自己保护密码。

至于“足够安全”,现在几乎每个人都使用OAuth(Twitter,Facebook等),所以至少证明了这一点。实际的安全性取决于您的具体实施。