アンドロイドアプリを作成していますが、Google App Engine(ユーザーのGoogleアカウントを使用せずに)のユーザーを認証するための情報を見つけることができません。アンドロイドデバイスにユーザー名とパスワードを保存してから、App Appで使用するデータをGoogle App Engineに保存することをお勧めしますか?Androidのログイン資格情報を保存するのに最適な場所
答えて
。ルート権限を取得されたシステムでは
、許可のアプリケーションは、このようにルート所有の暗号化されたXMLファイルにCLEARTEXT FOR ROOT許可APPS BECOMEどこAndroidの店舗SharedPreferences、にアクセスし、内部ストレージ/システムパーティションにアクセスすることができます。そのため、侵害された電話機でそのようなデータを格納するアプリケーションが発生し、ユーザーが異なるサービスに対して同じ電子メール/パスワードを濫用する癖がある場合、攻撃ベクトルは、ユーザーが却下した警告にかかわらず、複数のサービスの認証情報を侵害するのは簡単です。彼の電話を訴えたり、アプリにそのような権限を与えたりするのは、の警告だけでは十分ではないからです。。
代替案は、カスタムの可変シードとソルトアルゴリズムを使用して、資格情報の永続ストレージを手動で暗号化することです。 secure-preferences libは、AndroidのSharedPreferencesインターフェイスを実装し、マイナーな調整を行ってデフォルトのスプリアスのほとんどの機能を維持するという追加のメリット(サンプルを見てください)を備えています。
2016編集:私はちょうど私が2016年に戻って、この質問に来て、サンバーナーディーノの加害者の携帯電話にOSを変更するアップルFBI対ドラマに素敵な参照を追加する必要を感じました。したがって、ほとんどのAndroidのように、簡単にルート可能な電話があり、それはデフォルトでルートされている場合や、ルートにデータを消去する必要がない場合もあります。 FBIは、あなたの信任状を得ることができない場合、Googleや貴社から何かを要求する必要はありません。 secure-preferencesのようなものを使用することで、あなた自身のシステム(この場合はあなたのアプリ)のみがこれらの資格情報にアクセスできるようにすることによって、Appleが決めた責任と同じ種類の責任を置くことができます。彼らが望むのであれば、FBIに迷惑をかけることになりますが、基礎となるOSではなく、自分のユーザーに、それらの資格情報を直接制御できる唯一の権限であるという感覚を与えることは、私の製品ではなくてはなりません。
が...このためSharedPreferences、のような...
public class PrefUtils {
public static final String PREFS_LOGIN_USERNAME_KEY = "__USERNAME__" ;
public static final String PREFS_LOGIN_PASSWORD_KEY = "__PASSWORD__" ;
/**
* Called to save supplied value in shared preferences against given key.
* @param context Context of caller activity
* @param key Key of value to save against
* @param value Value to save
*/
public static void saveToPrefs(Context context, String key, String value) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
final SharedPreferences.Editor editor = prefs.edit();
editor.putString(key,value);
editor.commit();
}
/**
* Called to retrieve required value from shared preferences, identified by given key.
* Default value will be returned of no value found or error occurred.
* @param context Context of caller activity
* @param key Key to find value against
* @param defaultValue Value to return if no data found against given key
* @return Return the value found against given key, default if not found or any error occurs
*/
public static String getFromPrefs(Context context, String key, String defaultValue) {
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
try {
return sharedPrefs.getString(key, defaultValue);
} catch (Exception e) {
e.printStackTrace();
return defaultValue;
}
}
}
は、単に私が今、そのより明確だと思う
// Saving user credentials on successful login case
PrefUtils.saveToPrefs(YourActivity.this, PREFS_LOGIN_USERNAME_KEY, username);
PrefUtils.saveToPrefs(YourActivity.this, PREFS_LOGIN_PASSWORD_KEY, password);
// To retrieve values back
String loggedInUserName = PrefUtils.getFromPrefs(YourActivity.this, PREFS_LOGIN_USERNAME_KEY);
String loggedInUserPassword = PrefUtils.getFromPrefs(YourActivity.this, PREFS_LOGIN_PASSWORD_KEY);
、などのこれらのメソッドを使用して考えてみましょう:)
申し訳ありませんが、これで何をする必要がありますか?あなたは説明できますか? –
はい、はるかに明確になりました。 –
さて、これらの方法はどこでもう一度使うのですか? –
することができます共有設定でユーザー資格情報を保存します。あなたはあなたの活動のどれでもこの嗜好値を使うことができます。保存された値はアプリケーション終了後も保持されます。 共有設定のサンプルコードはこちらです。コードを整理しておくために、アプリケーションのutilsクラスにプリファレンスコードを保存することをお勧めします。あなたは、Googleが発根習慣は、パワーと志望-電力の両方のユーザーが普及しているという単純な事実のために、彼らはあなたを教えてくれますどのように安全なにもかかわらず、SharedPreferences
を使うべきではありません
public static String KEY = "SESSION";
public static void saveUserName(String userid, Context context) {
Editor editor = context
.getSharedPreferences(KEY, Activity.MODE_PRIVATE).edit();
editor.putString("username", userid);
editor.commit();
}
public static String getUserName(Context context) {
SharedPreferences savedSession = context.getSharedPreferences(KEY,
Activity.MODE_PRIVATE);
return savedSession.getString("username", "");
}
@FranklySpeaking:データをローカルで優先的に保存する方法を教えています。また、あなたの資格情報を設定からGoogleのアプリケーションエンジンに保存することもできます。これをチェックしてくださいhttps://developers.google.com/appengine/docs/ –
- 1. AndroidでOAuthクライアントの資格情報を保持する場所
- 2. ログイン資格情報を保存するandroid
- 3. Javaの設定情報を保存するのに最適な場所
- 4. Macにライセンス情報を保存するのに最適な場所?
- 5. ユーザーのログイン情報を保存する場所
- 6. Javascriptを使用してログイン資格情報を保存するには?
- 7. MySQLデータベースにMS SQL Serverの資格情報を保存する
- 8. 1つのポートとログイン資格情報に異なるアプリケーション、ポート、資格情報を作成する方法
- 9. jdbc用のSQL Serverログイン資格情報
- 10. Webアプリケーション(LAMPスタック)のデータベース(MySQL)ログイン資格情報の保護
- 11. Silverlightアプリケーションにユーザー資格情報を保存する
- 12. ドッカーの資格情報をドッカー設定に保存
- 13. curlリダイレクトログイン資格情報の保護
- 14. 最近のWindowsアップデートと資格情報
- 15. ローカルに保存された資格情報google drive api 3
- 16. アレイをLaravelに保存するのに最適な場所
- 17. SSLを使用しない安全なログイン資格情報
- 18. 私のアプリでGoogleの資格情報を使ってAndroidでログインする
- 19. PHPデータベースセッションの処理MySQLログイン資格情報を無視する
- 20. ビッグXMLデータを保存するのに最適な場所
- 21. 共有ホストのWebアプリケーション(asp.net)にPayPalの資格情報を保存する
- 22. ウェブサイト訪問の間に資格情報を安全に保存する
- 23. Symfony 2.0.4 - ログイン時に不正な資格情報
- 24. テストのログイン資格情報をApple Review Teamに送信
- 25. 資格情報の配列
- 26. Hudson svnの資格情報
- 27. WCFメッセージレベルセキュリティクライアントの資格情報
- 28. Paypal WPSの資格情報
- 29. JenkinsのNexus資格情報
- 30. iPhoneアプリケーションで安全にリモートデータベースの資格情報を保存する
私は 'SharedPreferences'が始めるのに適していると思います。アプリを公開する場合**それらを暗号化する必要があります**。 –
パスワードを扱う際には、最も簡単に起きる場所は、最も障害が発生しやすい場所です。 Androidは、SharedPreferencesの暗号化や暗号化のオプションを提供していません。だから私は、始まるべき最善の場所は何らかの理由で最終版で終わるかもしれない場所ではないと言う。私も同様の問題があり、SecurePreferencesを使用して終了しました。https://github.com/scottyab/secure-preferences – leRobot
私の場合、私たちはここにあるいくつかのタブレットにインストールされる内部エンタープライズアプリケーションを開発しています。資格情報を保存する必要があるため、基本的な実装から始めるのが適切です。それらを暗号化することは、次のバージョンのロードマップにあります。誰もここにデバイスを持って行き、他人のパスワードを見るためにそれらをルートする人はいないでしょう: –