web-dev-qa-db-ja.com

Active Directoryに対するLDAP認証で受け入れられるSECURITY_PRINCIPAL形式は何ですか?

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ドキュメントへの参照を提供するものはありません。それとも、どこかで検索できる構成ですか?ありがとう!

21
Fung

[MS-ADTS:Active Directory技術仕様]から、ADの公式ドキュメントだと思います。

http://msdn.Microsoft.com/en-us/library/cc223499.aspx

「5.1.1.1.1単純認証」のセクションには、単純認証でサポートされているすべての名前形式がリストされています。

13
baldpate

LDAPプリンシパルテンプレートを確認する必要があると思います。 LDAPサーバーに必要な主要な認証テンプレートを指定します。プリンシパル認証テンプレートは、セキュリティプリンシパル(ログインしている人)の認証情報をLDAPサーバーに渡す必要がある形式です。デフォルト値は$ {email}で、これはMicrosoft Active Directoryで必要な形式です。他のLDAPサーバーには、異なる認証テンプレートが必要です。 LDAPサーバーの詳細については、ネットワーク管理者に確認してください。

1
puma_yagu