2017-03-14 6 views
1

開発環境: Windowsの いくつかの商用使用可能なLDAPクライアント-Libの MinGWの-gccの C - ではないC++やC#Active DirectoryはLDAPを使用して、現在のドメインのユーザーから属性を取得します

私が見つけた

次のLDAPクライアント-Librariesとサンプル:

Novell OpenLDAP

OpenLDAP libldap

マイクロそれはCベースする必要がソフトLDAPのLib

https://msdn.microsoft.com/en-us/library/aa367033(v=vs.85).aspx 
https://msdn.microsoft.com/en-us/library/aa366102(v=vs.85).aspx 
https://msdn.microsoft.com/en-us/library/aa367016(v=vs.85).aspx 

(私は何もADSIを考えていない) 私は(フィルタリング用)現在のドメインのユーザーのすべての属性 のリストを取得する必要があると私はどこ見当がつかない開始するには - 経験豊富なC/C++ユーザーイムが、AD/LDAPのもの

WINを使用して、ユーザーとドメイン名を取得することができTHX

UPDATE#1

イムで働いたことはありませんAPIを使用すると、ドメインAD/LDAP-Serverを検索/ルックアップすることができます。ldap_search_sを使用してユーザーに関する情報を接続および取得できます。

ldap_search_sのベース、フィルタ、および属性の値をすべて取得する必要がありますあるレベル)は、私のTESTUSERから属性(最初のような、LASTNAME、フルネームなど)

私の現在のテストは、このベース、フィルタを使用し、いくつかは(私の最初の)

base = "OU=Domain User,OU=TESTDOMAIN,DC=testdomain,DC=local" 
filter = "(&(objectClass=user)(sAMAccountName=testuser))" 
attrs = "memberOf" 

結果取得する例の属性値それはtestuserが属しているグループを私に(私は考える)与えます

イムは、現在唯一のユーザーのログイン名(testuserという)を得た - それはそれはsAMAccountNameの属性値だと思う - ので

CN = testuserをを使用して、OU =ドメインユーザー、OU = TESTDOMAIN、DC = TESTDOMAIN、DC =ローカル

しません(またはだろうか?)仕事理由は、CN-名イスト "テストユーザー"

UPDATE#2最初の例は、すでに私の問題解決

- 愚かな私を

唯一の質問は、ユーザー属性を見つける正しい方法だということですか?

base = "OU=Domain User,OU=TESTDOMAIN,DC=testdomain,DC=local" 
filter = "(&(objectClass=user)(sAMAccountName=testuser))" 
attrs = NULL 

これらのベース/フィルタの組み合わせは他のシステム/構成でも問題がありますか?

+0

Novell C#ライブラリはMono.Directory.LDAPに行きました(MonoはNovellにあったことを覚えておいてください)。 – jwilleke

+0

私はCを使用する必要があります - 見出し、テキスト、タグに記載されています - 移動したC#libのトラックはありませんでした – llm

+0

あなたの質問を[編集]してください[http:// whathaveyoutried.com)。問題を抱えているコードのアウトライン(ただし、好ましくは[mcve])を含める必要があります。次に、特定の問題を解決することができます。 [ask]も読んでください。 –

答えて

1

いくつかのことを理解する必要があります。まず、Active Directoryでの名前付けについて説明します。

distinguishedNameのは:

Active Directoryは、多くの命名属性があります。これは、OU =ユーザー、DC = MyDomainの、DCのcn =ジョー・スミスのようなオブジェクトの完全なLDAP DN、ある= comで、これがなければなりませんツリー内で一意とCN =ジョー・スミスのノードがコンテナ内で一意である必要がありますと言うことである、適用されます。ou =ユーザー、DC = MyDomainの、dc = comの

のsAMAccountName:これは通常は短いですユーザーの名前。ドメイン内で一意であり、強制されていなければなりません。 geoffcやjsmithのように。

ユーザープリンシパル名:これは電子メールアドレスのように見え、Office 365は電子メールアドレスです。 [email protected]これはあなたの森林内で一意であると考えられていますが、一意性は実際には強制されません。また、LDAPを介して、このフィールドにナンセンスを書くこともできます。ドメインのルートでは、追加SPN(サービスプロバイダ名は私が思う)を定義して、Active Directoryユーザーとコンピュータに追加可能なドメイン拡張として表示してユーザーに追加することができます。しかし、ADUCは、それを分割属性、値、そしてドメインサフィックスとして示していますが、単純な文字列として格納されています。

displayName:これは通常、ユーザーに表示される名前であるJoe Smithです。

メール:ユーザーの実際のメールアドレス、[email protected]。 Office365では、これもUserPrincipalNameに含める値です。

したがって、オブジェクト上のCN =は、意図的に行われていない限り、samAccountNameと同じではありません。実際には、デフォルトではCNがユーザーのフルネームになります。これは、ADユーザーとコンピュータのMMCスナップインがアカウントを生成する方法です。

次のフィルタの仕組みフィルターを指定すると、一致するものが戻されます。

あなたの検索が始まる場所です。したがって、ユーザーがどこに格納されているかを調べ、親オブジェクトをベースDNとして使用します。ときにはそれがツリーの根元にあります。時にはそれは特定のOUまたはCNオブジェクトです。コンテナオブジェクトクラスは、組織単位より古いNTスタイルのドメインモデルに一層近似しているため、既定でADは、CN = Usersというコンテナを作成します(OU = Usersとは異なる場合があります)。

フィルタは、必要なユーザーのみを返すものです。あなたのフィルタの例はうまくいきますが、あなたが望むものを明確にしていないので、何が最良の選択であるか答えるのは難しいです。

属性は返される値です。プレゼンスをテストするだけの場合は、いつもentryDNやdistinguishedNameを追加することができます。どちらも同じもの、つまりオブジェクトのDNを返す必要があります。これは、LDIFのオブジェクトのDNが最初の行であるために役立ちますが、コードで属性値を選択する準備ができている場合は、その属性を属性として使用すると便利です。

+0

私は今それを得たと思う – llm

関連する問題