2011-04-23 34 views
7

我知道我可以将值设置为'MODE_PRIVATE',并且只有我的应用程序/ userId才能够访问它们,但是,有没有任何方法让用户在任何时候访问这些值?那么将它们存储在Shared Preferences中是否“安全”,还是有更好的地方?安全地在Android的共享首选项中存储Oauth2访问/刷新标记?

此外,如果我稍后决定公开某些用户设置的偏好,我是否可以隐藏这些值?

谢谢。

编辑:我也知道内部存储,但我想知道是否可以通过共享首选项实现更简单的操作。

回答

3

共享首选项只是存储在应用程序的数据文件夹中的纯文本XML文件。无论如何,这不是一个安全的位置。查看这些文件并提取令牌非常容易。您仍然可以使用共享首选项,但需要加密存储的信息。至于“内部存储”,它们与“共享首选项”共享相同的位置,因此它们仍然很容易查看。

您的未加密数据对于在手机中运行的其他应用程序是安全的,但不是来自恶意用户。

2

如果你想向用户显示一些偏好,你将不必担心这些显示。我认为shared_preferences可能是存储这些东西的“最安全”的地方。除非用户拥有根深蒂固的手机,并且他们给予恶意应用根权限才能阅读您的数据文件,否则就我所知,没有什么可担心的。虽然我期待别人的回应。出演!

2

即使您将访问令牌存储在设备上的安全位置,您也应该认为它可以透露。这就是为什么你的移动应用程序代码中不应该有客户端秘密的原因。 对于访问令牌,您可以尝试保持它们的安全,但无法使其100%安全。所以你不应该得到不必要的范围或不必要的长寿命令牌。

ps。 一般来说,移动设备使用“response_type = token(implicit grant)”,它不应该获得刷新标记。这取决于认证服务器的政策,虽然..

+0

感谢您的帮助。我们使用的oauth2协议要求使用刷新令牌以及典型的访问令牌。问题是我们需要将它们存储在设备上的某处*,因为它需要在会话中持续存在,并且应用程序无法存储它们。 – Igor 2011-05-01 20:17:43

+0

OAuth2规范要求移动设备(所有不能让客户端保密的客户端)不要使用刷新令牌。如果您使用的OAuth2服务器需要它,则意味着服务器不支持此类客户端。 – 2011-05-06 17:12:22

+0

你能提供这个链接吗?我在看:http://tools.ietf.org/html/draft-ietf-oauth-v2-15#section-4.4,它说refresh_token是可选的 – Igor 2011-05-06 18:57:52