2016-05-21 6 views
0

Windows LDAP APIを使用してActive Directryからユーザー属性を取得しようとしています。私が使用しています:LDAP C API経由でActive Directoryから特定のユーザー属性を取得する適切な方法は何ですか?

  • Active Directoryのバージョン:3
  • Wldap32.libバージョン:Windowsの10のx64
が付属して1つのWindows Server 2012の
  • LDAPバージョンが付属して1を

    例:

    PCHAR myAttributes[4]; 
    
    myAttributes[0] = "DistinguishedName"; 
    myAttributes[1] = "DisplayName"; 
    myAttributes[2] = "PasswordExpired"; 
    myAttributes[3] = "mail"; 
    
    ldap_search_s(
        myLdapConnection, // Ldap connection 
        myDomain,   // DN to start search 
        LDAP_SCOPE_SUBTREE, // Scope 
        myFilter,   // Filter 
        myAttributes,  // Retrieve list of attributes 
        0,     // Get both attributes and values 
        &mySearchResult  // [out] Search results 
    ); 
    

    それはDistinguishedNameDisplayNameと返します属性ですが、PasswordExpired属性を返すことはありません。

    私はいくつかの他の属性を照会しました。ブール値を持つ属性とEmailAddress属性を返さないようです。

    1. なぜPasswordExpired属性が返されないのですか?
    2. EmailAddress
    3. EmailAddressmailの間に違いはありますか?
  • 答えて

    2
    1. は、Active DirectoryにはPasswordExpired LDAP属性がありません。クエリを作成するには、標準のActive Directoryスキーマhttps://msdn.microsoft.com/en-us/library/ms675090(v=vs.85).aspxの属性名をこのURLで調べます。特定のアカウントのパスワードが期限切れになっているかどうかを確認するには、ユーザーアカウントhttps://msdn.microsoft.com/en-us/library/ms680832(v=vs.85).aspxの異なる状態のフラグを格納している値であるuserAccountControl属性を確認する必要があります。 LDAPだけに固執する必要がない場合に備えて、これをすべて翻訳するIADsUserインターフェイスがあります。https://msdn.microsoft.com/en-us/library/aa746343(v=vs.85).aspx

    2. 現在のプライマリ電子メールアドレスはメール属性にあります。メールと同じスキーマ属性のCNであるE-mail-Addressesを意味していない限り、EmailAddress LDAP属性はありません。違いはありません。

    3. 上記を参照してください。一般的にC/LDAPに固執する魅力的な理由がない場合は、代わりに.Net Frameworkを使用することをお勧めします。さもなければパスワードの有効期限が切れた場合のようなビットフラグを解釈するだけでなく、異なる認証方法、時間と日付をキャプチャする異なる構造、タイムゾーンの会計、UTF、紹介やその他のものを追跡するなど、あなたに先んじて多くの作業があります。あなたが達成したいものの複雑さに依存します。 .Net Frameworkのほうがはるかに高速です。詳細については、「DirectoryServices https://msdn.microsoft.com/en-us/library/mt481534(v=vs.110).aspx名前空間」または「セキュリティ名前空間」を参照してください。

    関連する問題