ActiveDirectoryに対してLDAPを介してユーザーを認証しようとしています。以下は、私が使用するコードスニペットです。
private DirContext bindAsUser(String bindPrincipal, String password) {
Hashtable<String,String> env = new Hashtable<String,String>();
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, bindPrincipal);
env.put(Context.PROVIDER_URL, bindUrl);
env.put(Context.SECURITY_CREDENTIALS, password);
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.Sun.jndi.ldap.LdapCtxFactory");
env.put(Context.REFERRAL, "follow");
try {
return new InitialLdapContext(env, null);
} catch (NamingException e) {
e.printStackTrace()
}
}
バインドのコードは、以下を指定した場合に機能します。
NetBIOSDomainName\sAMAccountName
(例:domain\username)、またはuserPrincipalName
(例:[email protected])、またはdistinguishedName
(例:CN = username、OU = xxx、DC = abc、DC = com)、またはobjectSid
(例:S-1-5-21-3623811015-3361044348-30300820-1013)SECURITY_PRINCIPAL
として、sAMAccountName
(ユーザー名など)が使用された場合は失敗しました(フォレスト内で一意の名前のみが有効だと思います)。
では、SECURITY_PRINCIPAL
の受け入れられるパターンは何ですか?同様の質問をいくつか検索しましたが、公式のAD/LDAPドキュメントへの参照を提供するものはありません。それとも、どこかで検索できる構成ですか?ありがとう!
[MS-ADTS:Active Directory技術仕様]から、ADの公式ドキュメントだと思います。
http://msdn.Microsoft.com/en-us/library/cc223499.aspx
「5.1.1.1.1単純認証」のセクションには、単純認証でサポートされているすべての名前形式がリストされています。
LDAPプリンシパルテンプレートを確認する必要があると思います。 LDAPサーバーに必要な主要な認証テンプレートを指定します。プリンシパル認証テンプレートは、セキュリティプリンシパル(ログインしている人)の認証情報をLDAPサーバーに渡す必要がある形式です。デフォルト値は$ {email}で、これはMicrosoft Active Directoryで必要な形式です。他のLDAPサーバーには、異なる認証テンプレートが必要です。 LDAPサーバーの詳細については、ネットワーク管理者に確認してください。