2017-04-26 108 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令牌是服務器在應用程序內驗證用戶憑據後提供的令牌。

密鑰庫包含一個或多個用於對應用進行數字簽名的證書。這是爲了防止其他人上傳與您的軟件包名稱相同的應用程序並將其替換。