私は開発目的のためにプレーンテキストでパスワードを保管していましたが、代わりにハッシュの格納を開始したいが、GlassFishがハッシュされたパスワードに対して正しく認証されていないSecurityExceptionの後で:GlassFish SHA-256ダイジェスト認証
まず、GlassFish 3.1を実行していて、自分のJDBC領域のダイジェストをSHA-256に設定しています。
私User
クラスは、次の注釈付きパスワードフィールドがあります。
@Basic(fetch = FetchType.LAZY)
@Column(length = 45, nullable = false)
private String password;
次のヘルパーメソッドは、パスワードをハッシュ化する責任がある:
private byte[] digest(String input) {
byte[] output = null;
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
output = md.digest(input.getBytes("UTF-8"));
} catch (NoSuchAlgorithmException ex) {
Logger.getLogger(RegistrationController.class.getName()).log(Level.SEVERE, null, ex);
} catch (UnsupportedEncodingException ex) {
Logger.getLogger(RegistrationController.class.getName()).log(Level.SEVERE, null, ex);
}
return output;
}
次のように私は、ユーザーにパスワードを設定します。
u.setPassword(Base64.encode(digest(password)).toString());
私はBase64エンコードされませんこれは文書化されていないようですが、この質問:Glassfish Security - jdbcRealm: How to configure login with SHA-256 digestはそうする必要があることを示唆しています。
GlassFishは文字列(VARCHAR)またはバイト[](BLOB)をデータベースのパスワードフィールドとして想定していますが、正しくパスワードをハッシュしていますか?正しいですか?追加でBase64でパスワードハッシュをエンコードするには?
ありがとうございます!
多くのおかげで再び!実際には、私はJDBC領域でエンコーディングパラメータを指定できませんでしたが、これは現在正しく動作しています。 – Laurens
@Laurens、まあ、私はかなりの数週間前に同じ獣と戦ったので、あなたはそのすべてのトラブルを経験しないという利点があります。いずれにしても、そのプロジェクトのソースは数日で利用できるようになるので、私の答えを読むのではなく、実際の実装を見ることができます。 –
それは楽しみにして、それを楽しみにしています! – Laurens