Flutter离线身份验证

时间:2018-08-10 16:33:45

标签: flutter

在我的应用程序中,无论用户是在线还是离线,用户都应该能够登录,因此可以向我的应用程序添加离线身份验证功能,因为我相信google_sign_in包仅可以在线身份验证。

1 个答案:

答案 0 :(得分:2)

如果您只需要输入电子邮件和密码,那么检查起来就很简单了,您无需深究本机代码就可以做到这一点。

但是,您还需要安全地存储密码信息,这样需要做更多的工作。

注册期间:

  1. 询问用户名和密码,然后确认密码
  2. 安全地散列密码(使用诸如PBKDF2,SCrypt或Argon2之类的用于密码散列的算法。互联网上有很多 ton ,为什么这很重要)。有一个用于此的插件:password
  3. 尽可能安全地存储此哈希和用户名-flutter_secure_storage似乎是一个不错的选择,尽管它仅支持android 4.3 +。
  4. 使用生成的加密密钥对您需要安全保存的任何数据进行加密(也许the encrypt package可以帮助您,但我不确定100%保证它的完整性或安全性)。

如果您想让用户第一次登录服务器并保存密码,则此过程应大致相同,只是您在散列之前/之后验证服务器是否接受密码。< / p>

登录期间:

  1. 询问用户名和密码(或者希望只是密码,否则您会讨厌用户的废话= D)
  2. 检索以前存储的密码哈希
  3. 根据先前存储的哈希值进行验证
  4. 使用生成的加密密钥解密数据等。

还有其他一些事情...请确保密码输入不支持自动完成功能,否则用户的键盘可能会保存其密码。如果您有一个按钮来显示密码,则可能需要考虑在显示屏幕截图时以某种方式阻止屏幕截图(尽管这是本机的)。而且永远不要以纯文本形式存储密码!使用散列意味着至少攻击者进入后,他们将看不到实际密码。

请注意,尽管这应该可行并且至少应具有中等安全性,但不要将其视为100%安全的解决方案。与SO = P上的陌生人相比,您应该始终获得有关如何实施安全性的专家意见。

还有一个针对bug open的Google auth插件,以解决这一问题。

还有一个local_auth插件,该插件支持iOS上的TouchId / FaceId和android上的指纹-但是,它仅适用于android 6+和具有指纹读取器的设备,因此您可能需要输入用户名/密码还是回退。

很高兴回答您对此有任何疑问。