0

クライアントのサードパーティとしてdjangoアプリを開発しており、認証にLDAPを使用する必要があります-業界のLDAPサーバーでは、クライアントがツリーでDNを検索できないと想定しているため、必要だと思います自分でDNを作成するか、何らかの方法で検索を認証しますが、オンラインのどこにもドキュメントが見つかりません。

クライアントには、アプリの 2 つの異なるタイプのコンシューマーがあり、それらは別の OU にあります。

私の質問は次のとおりです。私は愚かですか?検索の認証について心配する必要はありますか? ログイン時にユーザー名からユーザーの DN を取得する標準的な方法は何ですか?

ありがとう!

4

1 に答える 1

1

LDAP の実装によって異なります。

たとえば、Active Directory は、認証されていない検索を許可しません。この場合、最初に認証済みユーザーとしてログインしてから、ツリーを検索する必要があります。

他の実装では、匿名バインドが許可される場合があります。

ツリーを検索できるようになったら、あとは正しいクエリを作成するだけです。Active Directory では、ログイン名は として保存されるsAMAccountNameため、ユーザーをフェッチするには、ログインを取得して検索にバインドします。ただし、最初に認証する必要があります。これを行うコードを次に示します (エラー チェックは行いません)。

def get_user(user):
    user_dn = "DC=DEPARTMENT,DC=FOO,DC=COM"
    login_attr = '({}={})'.format('sAMAccountName', user)

    conn = ldap.initialize(your_ldap_url)

    # The next two lines are required for AD specific
    # quirks, you may have to comment them for other LDAP servers
    conn.set_option(ldap.OPT_REFERRALS, 0)
    conn.set_option(ldap.OPT_PROTOCOL_VERSION, 3)

    conn.bind("Foo User", "Sekret") # Authenticate first
                                    # before searching
    result = conn.search_s(user_dn,
                           ldap.SCOPE_SUBTREE,
                           login_attr)
    return result[0][1]
于 2015-04-15T05:14:33.813 に答える