私はこのトピックについてもっと見つけるだろうと思ったが、私はしなかった。
特定のユーザーがどのouに属しているかをチェックするJavaアプリケーションを作成する必要があります。
しかし、サーバーで認証するために、ユーザー名とパスワードを要求することも、ソース(または他のファイル)に保存することもできません。
JNDIとJavaを使用して、現在ログインしているユーザーで認証する方法はありますか?
私はこのトピックについてもっと見つけるだろうと思ったが、私はしなかった。
特定のユーザーがどのouに属しているかをチェックするJavaアプリケーションを作成する必要があります。
しかし、サーバーで認証するために、ユーザー名とパスワードを要求することも、ソース(または他のファイル)に保存することもできません。
JNDIとJavaを使用して、現在ログインしているユーザーで認証する方法はありますか?
できることは、現在Javaアプリケーションにログインしているユーザーと同じユーザー名のユーザーがいるかどうかを確認することだけです。パスワードがないと、他に何もチェックできません。これを行うには、他のユーザーを一覧表示する権限を持つLDAPユーザーのユーザー名とパスワードが必要です。次に、ユーザーのLDAPを照会できます。
これは私が使用しているものを応用した例であり、Active Directoryをチェックするため、おそらくいくつかの変更が必要になります。
boolean userFound = user_exits("searchUser",
"searchPassword",
"(sAMAccountName={USERNAME})",
"ldap://ldap.mydomain.com",
"OU=MYOU,dc=mydomain,dc=com");
private boolean user_exits(String searchUser, String searchPassword,
String filter, String url, String baseDn) throws NamingException {
DirContext ctx = null;
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, url);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, searchUser);
env.put(Context.SECURITY_CREDENTIALS, searchPassword);
try {
ctx = new InitialDirContext(env);
String[] attributeFilter = {};
SearchControls sc = new SearchControls();
sc.setReturningAttributes(attributeFilter);
sc.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration<SearchResult> results = ctx.search(baseDn, filter, sc);
return results.hasMore();
} catch (NamingException e) {
throw e;
} finally {
if (ctx != null) {
try {
ctx.close();
} catch (NamingException e) {}
}
}
}
LDAPクライアントに既存の接続がある場合は、who am i?
拡張要求を使用するか、またはを使用authorization identity request control
して既存の接続のauthIDを決定します。LDAP準拠のサーバーとUnboundIDLDAPSDKはどちらの方法もサポートします。拡張要求は接続でいつでも使用できますが(who am i?
認証IDに拡張要求を使用する権限がある場合)authorization identity request control
、バインド要求にのみ接続できます。
who am i?
拡張リクエストの使用とは、 AuthDemo.javaauthorization identity request control
に示されています。
これに対する実際の解決策はないように思われるので、スクリプト/ツールの開始時にログイン情報を要求し、必要に応じてそれを使用します。