2017-04-26 110 views
10

我已经通过身份验证让服务器访问令牌"uyhjjfjfgg567f8fhjkkf",现在我想将其安全地保存在设备中。我在Android开发人员网站中查看了Keystore和Keychain。我不清楚它是如何工作的以及我们应该如何从密钥库中检索令牌。如何在Android中安全地保存Oauth访问令牌

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(); 

回答

9

无论如何,您不需要保存访问令牌。保存在内存中就足够了。

你需要不断刷新令牌,你有那几个选项:

  • 在文件
    • 直接在内部存储文件
    • 或使用SharedPreferences
    • 或数据库
  • 合成使用叔他AccountManager

考虑使用StoredCredential。对于流量本身,我建议您使用Google AppAuth library

当然,你也可以使用一个密码加密密钥:

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

2

Here你可以通过Androidauthority找到一篇关于Android安全可用性的非常好的文章。

Android密钥库实现的全面示例可以在here找到。

另一个不错的选择是Google's keyczar,您可以在git存储库上查看示例和详细信息。在那里您还可以找到Known Security Issues的详细列表,以便您了解它是否适​​合您的进一步实施。

对于您当前的问题,我会建议在Android Keystore上面的第二个链接中执行示例实现。

祝你好运!

0

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

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 

我只想建议使用SharedPreferences如果值是加密的,因为即使在XML文件只适用于应用程序,它可以在解锁装置进行访问。

如果您已经在使用SqlLiteDB,我可能会使用它。如果没有,保存令牌有点沉重。

编辑:

OAuth凭证是完全无关的用于签署应用程序密钥和密钥库。

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

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