1

次の問題があります。

サーバーと通信するリッチ クライアント (Java) をデスクトップ コンピューターで実行しています。リッチ クライアントを起動すると、ユーザー名とパスワードの入力を求められます。リッチクライアントはそれをサーバーに送信し、サーバーは「はい、アクセスを許可します」または「アクセスを許可しません」と言います。

ここで、もう少しユーザー エクスペリエンスを提供したいと考えています。ユーザーが Windows にログインしてリッチ クライアントを起動すると、リッチ クライアントは自動的に現在のユーザーをチェックし、このユーザーが許可されているかどうかを LDAP (Active Directory) に問い合わせます。いいえ。

私はLDAPをまったく初めて使用しますが、これまでに次のことを理解しました:

次の方法で現在のユーザーを取得できます。

userName = new com.sun.security.auth.module.NTSystem().getName();

次のように Waffle を使用してドメインを取得できます。

WindowsAuthProviderImpl auth = new WindowsAuthProviderImpl();

for(IWindowsDomain domain : auth.getDomains())
    userDomain = domain.getFqn();

これで、既知の LDAP アカウントを取得して、この特定のユーザーを検索できます。

Hashtable<String, String> props = new Hashtable<String, String>();
props.put(Context.SECURITY_PRINCIPAL, "admin");
props.put(Context.SECURITY_CREDENTIALS, "123");

DirContext context = LdapCtxFactory.getLdapCtxInstance("ldap://host:12345/", props);
String filter = "(& (userPrincipalName=" + userName + "@" + userDomain + ")(objectClass=user))";

SearchControls controls = new SearchControls();
controls.setSearchScope(SearchControls.SUBTREE_SCOPE);

context.search(dc, filter, controls);

最後に、必要なユーザーに関する情報を取得しました。しかし:

  1. 保存ですか?または、誰かが簡単にユーザー名とドメインを偽造できますか?
  2. LDAP サーバーに接続するための「admin」ユーザーを削除したいと考えています。現在のユーザーを取得して、それに接続しようとします。しかし、どのように?LDAP サーバーに接続するにはパスワードが必要ですが、Windows はもちろんパスワードを教えてくれません。

では、Windows で現在ログインしているユーザーを LDAP に対して検証/確認するにはどうすればよいですか?

私がこれまでに行ったことは複雑に思え、間違っていると感じています。意味が分からなかったと思います…

編集:

次のように、Waffle から現在のユーザーのグループを取得することもできます。

WindowsAuthProviderImpl auth = new WindowsAuthProviderImpl();
IWindowsIdentity identity = auth.logonUser(user, pwd);
for(IWindowsAccount group : identity.getGroups())
    group.getFqn();

しかし、既に Windows にログインしているのに、もう一度パスワードが必要です...

4

1 に答える 1