2017-04-26 1 views
10

인증 후 서버에서 액세스 토큰을 가지고 있습니다. 이제 "uyhjjfjfgg567f8fhjkkf"라고 말하면 장치에 안전하게 저장하고 싶습니다. 나는 안드로이드 개발자 사이트에서 Keystore와 Keychain을 보았습니다. 어떻게 작동하는지 그리고 키 스토어에서 토큰을 검색하는 방법을 명확히 이해하지 못합니다.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

어쨌든 수명이 짧기 때문에 액세스 토큰을 저장할 필요가 없습니다. 그것을 기억에 남기는 것이 좋습니다.

당신은 새로 고침 토큰을 유지해야합니까, 당신은 몇 가지 그 옵션이 있습니다 파일에서

    • 직접 내부 저장 장치에있는 파일에
    • 또는 사용
    • 또는 t을 사용하여 데이터베이스
  • 에서 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 Android 보안에서 사용 가능한 가능성과 관련하여 Androidauthority에서 정말 좋은 기사를 찾을 수 있습니다.

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 

값이 암호화 된 경우 xml 파일이 응용 프로그램 만 사용할 수있는 경우에도 때문에 만, 된 SharedPreferences를 사용하는 것이 좋습니다 것, 그것은 루팅 된 기기에 액세스 할 수 있습니다.

이미 SqlLiteDB를 사용하고 있다면 아마도 그것을 사용하게 될 것입니다. 그렇지 않은 경우 토큰을 저장하는 데 조금 무거워요.

편집 :

의 OAuth 토큰이 응용 프로그램 서명에 사용되는 키와 키 스토어에 전혀 관계가없는 것입니다.

oauth 토큰은 응용 프로그램 내에서 사용자의 자격 증명을 확인한 후 서버에서 제공하는 토큰입니다.

키 저장소에는 응용 프로그램에 디지털 서명하는 데 사용되는 하나 이상의 인증서가 들어 있습니다. 다른 사람이 귀하의 패키지 이름과 동일한 패키지 이름을 가진 앱을 업로드하지 못하도록 방지하기위한 것입니다.

관련 문제