ログイン情報を安全に保存する方法は何ですか? ユーザーがオンライン アカウントにログインする必要があるスイング アプリケーションがあり、現在はログインできますが、可能であればユーザーのログイン情報を自分のコンピューターに保存できるようにしたいと考えています。これを行うために私が考えたいくつかの方法があります:
- ログイン情報をファイルに保存する
- ログイン情報をデータベースに保存する
これを行う最善の方法は何ですか?Javaにはこれを行うための組み込み機能がありますか?
本当にログイン情報をユーザーのコンピューターに保存したい場合は、ダニエル・カプランが言及したこと以外に、昔ながらの方法は、それを Cookie に保存することです。
もう 1 つの方法はWeb SQLに格納することですが、その Javascript(HTML5) 中心であり、それに対するクライアント側のサポートはまだ不十分です。
編集 - そのswingアプリケーション以来
もう 1 つの安全な方法は、MD5 で暗号化されたパスワードを使用してSQLiteに保存することです。
セキュリティをあまり気にしない場合は、XML ファイルまたは構成ファイル、さらには CSV ファイルに保存してください。
アプリケーションが順調に進んでいるため、ログイン情報をファイルに保存できますが、暗号化された形式で保存できます。アプリケーションがデプロイされる場所にデータベースをインストールしたくないため、データベースを使用しても意味がありません。
アプリが既にユーザーのマシン上のデータベースからデータにアクセスしている場合は、ユーザーの資格情報をファイルに保存するよりも、データベースに保存することをお勧めします。
Preferences API を使用してデータを保存および取得することにしました
http://docs.oracle.com/javase/7/docs/api/java/util/prefs/Preferences.html
最終的なコードの大まかな例を次に示します。
public class Login extends javax.swing.JDialog{
// Get saved info and set the textbox text
public Login(){
String userName = pref.get("user", "");
if(!userName.equals("")){
this.user.setText(userName);
}
String passName = pref.get("pass", "");
if(!passName.equals("")){
this.pass.setText(passName);
}
}
// Run on login button click
public void login(){
String p = new String(pass.getPassword());
DoLogin log = new DoLogin(user.getText(), p);
log.execute();
}
// Process in background
public class DoLogin extends SwingWorker{
public void done(){
// On successfull login save user data
pref.put("user", this.strUser);
pref.put("pass", this.strPass);
}
public String doInBackground(){
// Process login
}
}
}
ユーザー名情報を意味する場合は、データベースに保存しても問題ありません。
パスワードを意味する場合、通常よりもプレーンな形式でどこにも保存されません。
保存されるのは、何らかの (より良い - 古い実績のある) アルゴリズムによって生成されたハッシュ (パスワードに戻すことは不可能と見なされます) です。
誰かがログインしようとすると、システムは入力されたパスワードを取得し、(同じアルゴリズムを使用して) ハッシュに変換し、データベース (または他の場所) にあるものと比較します。