android - 使用 sqlite 数据库和内容提供程序在应用程序中进行登录设计

标签 android database authentication server

我正在制作一个从服务器下载数据的 android 应用程序,我已经实现了一个存储来自服务器的数据的 sqlite 数据库和一个内容提供程序,所有这些都是为了让应用程序在没有互联网连接的情况下工作。问题是应用程序需要用户登录才能工作,这需要互联网连接,所以问题是允许用户在没有连接的情况下登录的最佳方式是什么?因为我认为如果用户无法在没有互联网的情况下访问它,那么拥有一个无需连接即可运行的应用程序是没有意义的。我考虑过将登录该设备的用户和密码存储在 sqlite 数据库中,就像存储服务器数据并从那里检查一样,但这安全吗?提前致谢:)

最佳答案

喜欢缓存登录凭据吗?

您正在使用一些基于强密码的 key 推导(如 pbkdf2)将密码存储在服务器上 - 如果用户成功“登录”,为什么不在您的本地生成另一个密码的强盐+强哈希副本SQLite 数据库,所以即使没有可用的互联网连接,您也可以重新验证用户(直到某个到期日期)? (您应该在一段时间后过期该缓存的凭据集 - 需要再次连接互联网才能继续。48 小时或对我来说似乎是正常的。)

这就是你想要的吗?


这主要意味着如果有人窃取或以其他方式获得对手机 SQLite 数据库的访问权限,他们将拥有散列密码。因此,请确保它尽可能安全地存储。 (网上有很多 - 看看 NIST 关于这个主题的出版物;永远不要隐含地信任你在网上找到的代码......)如果这个密码足够强大,就不会丢失任何东西。

(如果用户的“在线”密码被迫每 90 天轮换一次,并且破解缓存副本需要 90 多天 - 什么都不会丢失。)

您的登录代码的实现将首先尝试联系服务器进行身份验证 - 如果失败,它将检查是否有本地缓存​​的尚未过期的凭据,并针对这些凭据进行本地身份验证(使用类似于您的代码服务器端)。

关于android - 使用 sqlite 数据库和内容提供程序在应用程序中进行登录设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33648584/

相关文章:

android - 是否有任何特殊网站可以为移动应用程序获取丰富的背景/图像?

java - 如何将 jdbc 连接器连接到 MySql 数据库服务器?

android - 设置弹出窗口显示时窗口状态栏颜色

database - 在保持抽象的同时将格式化文本存储在数据库中

android - 在 Android 中通过 AccountManager 请求多个 oauth2 范围

Android 语法高亮?

php - 如何避免并记录数据库的一些意外情况?

java - 从巨大的数据库表中检索结果集的策略

authentication - nginx auth_request : access original query parameter

python - 如何为 Solr 设置 dsetool 身份验证?