各ユーザーが Active Directory サーバー経由で Windows にログインする小さな LAN があります。同じ方法で Java コードからユーザーを認証できるようにしたいと考えています。私は次の方法でこれを行っていました:
Hashtable <String, String> env = new Hashtable <>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://192.168.0.1:389");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "user1");
env.put(Context.SECURITY_CREDENTIALS, "pass1"));
env.put(Context.REFERRAL, "ignore");
try {
new InitialDirContext(env).close();
return true;
} catch (AuthenticationException ex) {
return false;
}
とuser1
はpass1
ユーザー認証情報でした。
ローカル管理者が各ユーザーに許可されたワークステーションのリストを明示的に設定してアクセスを制限するまで、それはうまくいきました。現在、ユーザーは引き続き Windows にログインできますが、私のコード (許可されたワークステーションで実行) は、
javax.naming.AuthenticationException: [LDAP: error code 49 - ...:
LdapErr: ...,
comment: AcceptSecurityContext error,
data 531,
...]
ここで、「data 531」は「このワークステーションでのログオンは許可されていません」を意味します。
問題は、ユーザーの許可されたワークステーションが設定されている場合、LDAP サーバーでユーザーをどのように認証する必要があるかということです。どうにかして現在のワークステーションを LDAP サーバーに渡す必要がありますか?