Android:将身份验证 token 存储在共享首选项中是个好主意吗?

标签 android web-services authentication sharedpreferences token

我有一个与服务器通信的应用程序。 当用户登录到应用程序时,会在服务器上创建一个身份验证 token 并存储在应用程序的 SharedPreferences 中,并且每当应用程序从 Web 服务请求数据时,身份验证 token 就会被验证。

我的问题是,将身份验证 token 存储在 SharedPreferences 中是否安全?我问是因为具有 root 权限的用户可以访问首选项、提取 token 并使用它。

在这方面是否有更高的安全性?

最佳答案

简而言之,是的,这是一件非常合理的事情。

除此之外,您能做的最好的事情就是混淆。如果您将 token 保存在内存中,root 用户可以查看它。如果您对其进行加密,您还必须将加密 key 也存储在设备上,否则您将无法使用 token ……并且 key 可以像 token 一样容易被盗。

如果有人在设备上拥有 root 权限,则所有赌注都将取消。不要针对这种情况进行优化。如果您的应用具有超高安全性,请不要让它在 Root设备上运行,或者实现远程删除功能,用户可以报告他们的设备被盗,您可以使服务器上的 token 失效。

Android 4.3 引入了 Android Keystore .据称,这为加密 key 提供了安全存储。这可用于存储用于解密以传统方法存储的加密 token 的 key 。但是,引用的链接没有提及 root 设备如何影响其安全性。

2018 年更新: 大多数现代 Android 设备都有 hardware-backed keystores ,通过 SoC 提供的可信执行环境 (TEE)。这使得黑客无法(见下文)获得 keystore 主 key ,否则将需要解密您存储在 Android keystore 中的 key 。

嗯,“不可能”是一个强有力的词。最好说“不可行”。这意味着,您需要像电子显微镜这样的东西来扫描融合到提供 TEE 的 SoC 中的位。如果您是那种数据值得关注的人,那么您可能会遇到更大的问题。

关于Android:将身份验证 token 存储在共享首选项中是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19669560/

相关文章:

java - JAX-WS 处理程序 - handleMessage 未运行

java - 如何在android中将指数值格式化为两倍?

Android - 运行扩展 BaseAdapter 的 ListView 时出现空指针异常

Android:Tweetie 样式列表刷新

java - android中的IP回退

java - 在 Glassfish Web 部署后执行代码

html 登录名和密码字段不可点击

android - 将经过身份验证的 facebook 用户存储在数据库中

java - 认证有效用户

android - 在接受之前取消蓝牙服务器套接字时,整个过程都会结束。为什么?