如何在Android中安全地存储访问令牌和秘密?



Answers

您可以将它们存储在AccountManager 。 根据这些家伙,这被认为是最佳实践。

官方定义如下:

该课程提供对用户在线帐户的集中注册表的访问。 用户每个帐户输入一次凭据(用户名和密码),通过“单击”批准授予应用程序访问在线资源的权限。

有关如何使用AccountManager的详细指南:

但是,AccountManager最终只会将您的令牌存储为纯文本。 因此,我建议在将它们存储在AccountManager中之前先对其进行加密。 您可以使用AESCryptAESCrypto等各种加密库

另一种选择是使用隐藏库 。 对于Facebook来说这已经足够安全,并且比AccountManager更容易使用。 这是使用Conceal保存秘密文件的代码片段。

byte[] cipherText = crypto.encrypt(plainText);
byte[] plainText = crypto.decrypt(cipherText);
Question

我将使用oAuth从谷歌获取邮件和联系人。 我不想每次都要求用户登录以获取访问令牌和秘密。 根据我的理解,我需要将它们与我的应用程序一起存储在数据库或SharedPreferences 。 但我有点担心安全问题。 我读过你可以对令牌进行加密和解密,但攻击者很容易只是反编译你的apk和类并获得加密密钥。
在Android中安全存储这些令牌的最佳方法是什么?




那么你可以通过放弃两个选项来确保你获得令牌。

  1. 使用将您的访问令牌保存到不会反向的android密钥库中。
  2. 使用NDK函数进行一些计算,使用非常难以反转的c ++代码来保存您的令牌和NDK



Related