如何在Android中安全地保存Oauth访问令牌

我已经从服务器访问令牌后authentication现在说"uyhjjfjfgg567f8fhjkkf"现在我想要安全地保存在设备中。 我在Android开发人员站点中查找了Keystore和Keychain。 我不清楚它是如何工作的,以及我们应该如何从密钥库中检索令牌。

 KeyPairGenerator kpg = KeyPairGenerator.getInstance( KeyProperties.KEY_ALGORITHM_EC, "AndroidKeyStore"); kpg.initialize(new KeyGenParameterSpec.Builder( alias, KeyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_VERIFY) .setDigests(KeyProperties.DIGEST_SHA256, KeyProperties.DIGEST_SHA512) .build()); KeyPair kp = kpg.generateKeyPair(); /* * Load the Android KeyStore instance using the the * "AndroidKeyStore" provider to list out what entries are * currently stored. */ KeyStore ks = KeyStore.getInstance("AndroidKeyStore"); ks.load(null); Enumeration<String> aliases = ks.aliases(); 

Solutions Collecting From Web of "如何在Android中安全地保存Oauth访问令牌"

您无需保存访问令牌,因为无论如何它的寿命很短。 把它保存在内存中就足够了。

你确实需要保持刷新令牌,你有几个select:

  • 在一个文件中
    • 直接在内部存储的文件中
    • 或者使用SharedPreferences
    • 或在数据库中
  • 使用AccountManager

考虑使用StoredCredential 。 对于stream程本身,我build议您使用Google AppAuth库 。

当然,您也可以使用密码来encryption密钥:

 private static byte[] encrypt(byte[] key, byte[] text) throws GeneralSecurityException { final SecretKeySpec skeySpec = new SecretKeySpec(key, KEY_ALGORITHM); final Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM); cipher.init(Cipher.ENCRYPT_MODE, skeySpec, sInitVectorSpec); return cipher.doFinal(text); } 

密钥可以存储在KeyStore

在这里,您可以findAndroidauthority关于Android安全性的一篇非常好的文章。

Android密钥库实现的一个全面的例子可以在这里find。

而另一个不错的select是Google的keyczar ,你可以在git仓库中查看样本和细节。 在那里,您还可以find已知安全问题的详细列表,以便您了解是否适合您的进一步实施。

对于你当前的问题,我会build议继续上面的第二个链接的示例实现Android密钥库。

祝你好运 !

我们使用一个自定义的SharedPreference实例,在添加时encryption密钥和值,并在请求时解密。

 SecurePreferences preferences = ... preferences.edit().putString( "key", "value" ).apply(); // key and value are encrypted automatically String value = preferences.getString( "key", null ); // key and value are decrypted automatically 

如果值是encryption的,我只会推荐使用SharedPreferences,因为即使xml文件仅适用于应用程序,也可以在根设备上访问它。

如果您已经使用SqlLiteDB,我可能会使用它。 如果不是这样,保存一个令牌有点重。

编辑:

oauth标记与用于签署应用程序的密钥和密钥库完全无关。

oauth令牌是在应用程序内validation用户凭据之后由服务器提供的令牌。

密钥库包含一个或多个用于对应用进行数字签名的证书。 这是为了防止其他人上传与您的软件包名称相同的应用程序并将其replace。