【问题标题】:Safe to store Oauth2 access/refresh tokens in Shared Preferences in Android?可以安全地将 Oauth2 访问/刷新令牌存储在 Android 的共享首选项中吗?
【发布时间】:2011-08-11 13:47:01
【问题描述】:

我知道我可以将这些值设置为“MODE_PRIVATE”,并且只有我的应用程序/用户 ID 才能访问它们,但是,用户有什么方法可以随时访问它们吗?那么将这些存储在共享首选项中是否“安全”,还是有更好的地方?

此外,如果我以后决定公开一些偏好供用户设置,我可以隐藏这些值吗?

谢谢。

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

【问题讨论】:

    标签: android security sharedpreferences oauth-2.0


    【解决方案1】:

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

    ps。 一般来说,移动设备使用“response_type=token(隐式授权)”,它不应该获得刷新令牌。不过,这取决于身份验证服务器的策略..

    【讨论】:

    • 感谢您的帮助。我们使用的 oauth2 协议需要使用刷新令牌以及典型的访问令牌。问题是我们需要将它们存储在设备上的某处,因为它需要跨会话保持不变,而应用程序无法存储它们。
    • OAuth2 规范要求移动设备(所有没有客户端密码的客户端)不要使用刷新令牌。如果您使用的 OAuth2 服务器需要它,则表示该服务器不支持此类客户端。
    • 你能提供一个链接吗?我在看:tools.ietf.org/html/draft-ietf-oauth-v2-15#section-4.4 它说 refresh_token 是可选的
    • Implicit Grant 是针对没有客户端密码的客户端的流程。 tools.ietf.org/html/draft-ietf-oauth-v2-15#section-4.2
    【解决方案2】:

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

    您未加密的数据不会受到手机中运行的其他应用程序的影响,但不会受到恶意用户的影响。

    【讨论】:

      【解决方案3】:

      如果您想向用户显示一些偏好,您不必担心这些偏好会显示出来。我认为 shared_preferences 可能是存储这些东西的“最安全”的地方。除非用户有根手机并且他们授予恶意应用程序根权限以读取您的数据文件,否则据我所知没有什么可担心的。虽然我很期待其他人的回应。出演!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-11
        • 2021-07-08
        • 2022-10-15
        • 2012-09-11
        • 1970-01-01
        • 2013-11-09
        • 2019-06-13
        • 2018-07-19
        相关资源
        最近更新 更多