web-dev-qa-db-ja.com

保存方法Oauth android

認証後に"uyhjjfjfgg567f8fhjkkf"今、デバイスに安全に保存したい。 Android開発者向けサイトのキーストアとキーチェーンを調べました。それがどのように機能し、キーストアからトークンを取得する方法を明確に理解していません。

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();
16
George Thomas

とにかく寿命が短いため、アクセストークンを保存する必要はありません。メモリに保存しておくだけで十分です。

更新トークンを保持する必要があります。そのためのオプションがいくつかあります。

  • ファイル内
    • 内部ストレージのファイルで直接
    • またはSharedPreferencesを使用して
    • またはデータベース内
  • AccountManagerを使用する

StoredCredential の使用を検討してください。フロー自体については、 Google AppAuthライブラリ を使用することをお勧めします。

もちろん、暗号を使用してキーを暗号化することもできます。

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に保存できます。

17
rds

こちら Android Security。

Androidキーストアの実装の包括的な例は here にあります。

また、別の優れたオプションは Googleのkeyczar です。これは、サンプルや詳細についてはgitリポジトリで確認できます。また、 Known Security Issues の詳細なリストを見つけることができるので、それがさらに実装に適しているかどうかを確認できます。

現在の問題については、上記の2番目のリンクの実装例に従ってAndroid Keystoreを実行することをお勧めします。

幸運を !

4
Alex T

追加時にはキーと値を暗号化し、リクエスト時には復号化するカスタム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トークンは、アプリ内でユーザーの資格情報を検証した後にサーバーによって提供されるトークンです。

キーストアには、アプリにデジタル署名するために使用される1つ以上の証明書が含まれています。これは、他の人があなたと同じパッケージ名を持つアプリをアップロードして置き換えることを防ぐためです。

3
poetichustla