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

Kam*_*tka 7 security android token password-protection ios

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

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

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

缺点是:

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

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

Mic*_*ael 6

这是我们所做的:

基本上,这个想法与大多数服务提供的“忘记密码”非常相似:

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

优点:

  1. 更安全:用户不必考虑新密码(通常太简单了),也没有用户重用密码的风险。对于作为开发人员的我们来说,它提供了一种解决方案,该解决方案仅具有一个(而且很简单!)身份验证路径,该路径更易于理解并因此受到保护。另外,我们不必触摸任何用户密码/哈希密码。
  2. 到用户的入职流程更加顺畅:如果您在输入字段中预先输入电子邮件,则登录流程只需单击两次按钮就可以进入其中(除非您也想输入其名称/其他详细信息,但这需要传统登录中的其他输入字段也是如此)

不太好的:)

  1. 用户可能不习惯这种流程,并且可能想知道为什么他们不需要密码。我会添加一个小链接,说明“为什么我们不需要密码?”
  2. 如果应用被删除或用户注销,则他们将需要使用其电子邮件再次登录。对于用户偶尔不注销和登录的移动应用程序来说,这不是问题

我已经在我们的应用程序中实现了此流程,您可以在此处阅读更深入的说明:http : //www.drzon.net/passwordless-login-in-mobile-apps/

更多注意事项:

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

Mozilla 在这里也写了它


Nik*_*kov 2

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

需要考虑的事项:

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

至于“足够安全”,现在几乎每个人都使用 OAuth(Twitter、Facebook 等),所以它至少是经过验证的。实际的安全性将取决于您的特定实施。