ユーザー名とパスワードを要求することなく、自動認証に Cookie を使用する JSF Web アプリケーションがあります。ユーザー名とランダムな UUID を持つ Cookie を使用しWebFilter
、リダイレクトに a を使用します。
クライアント側に Cookie がない場合、認証はHttpServletRequest #login(String username, String password)によって行われます。舞台裏では、このアプローチは JAAS 認証を使用し、LDAP
背後でサーバーを使用します。
私の問題は、アプリケーションがユーザー ID と UUID を保持する Cookie を介してユーザーを認識するときに発生します。この状況では、
- アプリケーションはパスワードを知らないため、このメソッド
HttpServletRequest #login(String username, String password)
は使用できません。 - JNDI を介して LDAP サーバーにパスワードを要求する必要がありますか? これは一見不可能に思えます
- または、パスワードをデータベースに保存することもできます。しかし、これは情報の重複を意味し、私はそれが好きではありません。
- セッションに属性「ロール」を設定するだけの人を見たことがありますが、これは JAAS ログインと同等ではないようです。「同等」とは
isUserInRole()
、getUserPrincipal()
メソッドを使用できることを意味します。
問題は、この場合、ユーザーをどのようにログインさせるべきかということです。質問がより明確になったことを願っています。
編集
コードが話せるようにするために、Managed Bean の簡略化されたバージョンを追加します。
@ManagedBean
@SessionScoped
public class loginBean() {
private String username = null;
private String password = null;
private UUID uuid = null;
private boolean rememberMe = false;
public void doLogin() {
checkCookies(); // this method sets the property values after checking if
// username & uuid match the ones saved previously
if (username != null && uuid != null && rememberMe) {
// authenticate automatically. Here I don't know how to proceed, because
// I don't have the password, unless I have saved it in the application's db,
// duplicating it because it's already in LDAP server.
} else {
httpServletRequest.login(username, password); // this uses LDAP behind JAAS
createCookies(); // this method also saves username & uuid in the app's db
}
}