我已经建立了一个系统来显示Active Directory中的每个人的姓名,电子邮件地址和电话号码,但我无法让'thumbailPhoto'工作.
我在互联网上搜索过,但一直无法找到这是否可能,或者至少从Active Directory返回的格式.
我目前正在使用adldap类,所以如果有可能使用它是理想的.
提前致谢.
编辑:
我可以检索thumbnailPhoto属性中的数据,如果我将它们直接转储到浏览器,我会得到这样的结果:
ÿØÿàJFIFððÿáPExifII*BH〜†(2Ži‡¢XCanonCanon EOS 5D马克IIIðð2013:05:19 17:35:31š,à,è"'0230ð" ''( '0'8' ' '@'' 11 '' 11 0100 YY¢ħ¢¢P 2013¤¤¤¤:04:17 11:44:522013:04:17 11:44:52H¹o@B¬†è»dnäWμ~: 'HHÿØÿàJFIFÿÛC$' Ì|®( ",#(7),01444'9 = 82 <.342ÿÛC2!!2222222222222222222222222222ÿÀ-d"ÿÄÿÄμ}!1AQa"q2'¡#B±ÁRÑð$ 3br,%&'()456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ"......†‡ ‰S ''’•--~™的¢¤£¥|§¨©ª²³'μ·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄÿÄμw!1AQaq"2B'¡±A#$3RðbrÑ4A%N&'()
这不是全部,但它是一个很长的字符串,我假设是某种二进制字符串?
我试图使用PHP adLDAP版本4.04 在企业网络上进行身份验证,但尚未成功.
PHP Version 5.2.4
我试过这个stackoverflow后发布的PHP ldap - 需要强(呃)身份验证,没有运气.
我不是这个域控制器的管理员; 我只需要能够查询.
我能ping HOSTNAMEOFDC.domain.location.company.com(我的域控制器的FQDN)
域控制器是一个Windows Server 2012 R2 Standard.
我已成功查询此域控制器使用DsQuery并PowerShell AD Module没有问题,也没有我必须手动键入的身份验证.
我的代码:
<?php
require_once("includes/php/adLDAP/src/adLDAP.php");
$username = "domain\\username"; // also tried just "username"
$password = "somepassword";
// All possible settings are listed in this array
$options = array(
        "account_suffix" => "@domain.location.company.com",
//      "admin_username" => $username,
//      "admin_password" => $password,
//      "ad_port" => "636",
//      "base_dn" => "DC=domain,DC=location,DC=company,DC=com",
        "domain_controllers" …我目前尝试通过Linux上的LDAP更改我们的Active Directory Envoirenment中的密码,因为有问题的用户无法访问Windows机器,我们希望保持这种方式.为了更改密码,我目前很难搞清楚如何使用ldapmodify这样做.经过不同网站/论坛/新闻组的大量阅读后,我比以前更加困惑
但是:我尝试以下命令来执行此操作:
ldapmodify -f ldif.example -H ldaps://lab01-dc01.example.com -D 'CN=test,CN=users,DC=lab01,DC=example,DC=com' -x -W
ldif.example的内容:
dn: CN=test,CN=Users,DC=lab01,DC=example,DC=com
changetype: modify
delete: unicodePwd
unicodePwd:: V3VQdXV1STEyLg==
-
add: unicodePwd
unicodePwd:: QmxhVVVraTEyLg==
-
(别担心 - 这些密码不会在任何地方使用,也不是生产环境)
现在 - 每次执行命令时都会出现以下错误:
modifying entry CN=test,CN=Users,DC=lab01,DC=example,DC=com"
ldapmodify: Constraint violation (19)
 additional info: 0000216C: AtrErr: DSID-03190EB0, #1:
 0: 0000216C: DSID-03190EB0, problem 1005 (CONSTRAINT_ATT_TYPE), data 0, Att 9005a (unicodePwd)
现在,在我阅读之后,出现此错误的原因是密码格式错误或密码策略不允许我使用的密码.我检查了这个政策 - 现在多次 - 并且新密码根据所有标准确定符合政策.如果我使用Windows机器设置密码它也可以正常工作(当然我之后更改了"oldpassword"和"newpassword",因为策略不允许我更改为更早的密码).我将"-W"选项传递给ldapmodify后输入的密码也是正确的,否则ldapmodify发出的错误是我使用的是无效凭证而不是约束违规.所以 - 我能想到的唯一原因确实是一个错误的格式化密码 - 但我无法弄清楚错误的格式应该来自哪里,因为我使用普通的base64 algorythm来编码密码.
有谁知道发生了什么?任何人都可以把我推向正确的方向吗?
非常感谢帮助,我提前感谢你.
编辑:让我烦恼的东西:当我通过base64运行基本编码字符串时,它一直告诉我"输入无效".现在 - 我继续与使用Linux机器上的base64的只是重新编码的密码 - 但是当我通过解码功能再次运行生成的字符串,BASE64不断告诉我"无效输入" ...琴弦不过稍显在windows-base64编码的字符串和linux编码的字符串之间进行了更改.但是无论我放在那里,base64只是说"无效输入".
Edit2:Nevermind - 读取我收集的函数的目的,因为密码中的点和感叹号,它会抛出此错误.
ldap用户名需要作为自动完成功能显示在输入框中.我想获得如下用户列表:
        String ldapURL = "ldap://192.26.75.5:389/dc=northamerica,dc=company,dc=com";
    String principalPrefix = "domainName";      
    String username = SecurityContextHolder.getContext().getAuthentication().getName();
    String password = SecurityContextHolder.getContext().getAuthentication().getCredentials().toString();
    Hashtable<String, String>environment = new Hashtable<String, String>();
    environment.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
    environment.put(Context.PROVIDER_URL,ldapURL);
    environment.put(Context.SECURITY_AUTHENTICATION,"simple");
    environment.put(Context.SECURITY_PRINCIPAL,principalPrefix + "\\" + username);
    environment.put(Context.SECURITY_CREDENTIALS,password);
    environment.put( Context.REFERRAL, "follow" );
    DirContext context = null;
    NamingEnumeration<SearchResult> enumResult = null;      
    try
    {
                    context = new InitialDirContext(environment);                       
                    SearchControls controls = new SearchControls();                     
                    controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
                    String[] attrIDs ={"ou","uid", "givenname", "sn", "mail"};
                    controls.setReturningAttributes(attrIDs);
                    enumResult = context.search("","(&(objectCategory=person)(objectClass=user)(CN=*))", controls);                     
                    if(enumResult != null)
                    {
                                    //authentication successful                                 
                    }                       
    }
    catch(Exception e){
        System.out.println(e.getMessage());
    }
但是"enumResult"总是获得单个用户价值.如果我错过了某些内容或者错误的方法,请告诉我.任何帮助/建议/建议将不胜感激!谢谢.
嘿堆!我刚刚在我的开发机器中安装了AD LDS实例.配置如下:
<membership defaultProvider="ActiveDirectoryProvider">
      <providers>
        <add name="ActiveDirectoryProvider" 
             connectionStringName="ActiveDirectoryConnection" 
             connectionUsername="CN=adldsadmin,CN=Users,CN=TestNet,DC=contoso,DC=com" 
             connectionPassword="123456" type="System.Web.Security.ActiveDirectoryMembershipProvider,System.Web,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"
             connectionProtection="None"
             enableSearchMethods="true"
             applicationName="App1" />
      </providers>
    </membership>
我怎么得到以下异常:
指定的目录服务属性或值不存在.
adldsadmin用户位于所有组中.我究竟做错了什么?
谢谢!
我正在查看的文件名为examples.php,包含以下代码:
include (dirname(__FILE__) . "/adLDAP.php");
try {
    $adldap = new adLDAP();
}
显示的错误如下:
Fatal error: Class 'adLDAP' not found in /var/www/examples.php on line 14
第14行是:
$adldap = new adLDAP();
adLDAP.php与examples.php位于同一文件夹中,并包含adLDAP类.
我搞砸了包含声明吗?我用我试过的其他格式得到"没有这样的文件或目录".感觉就像我错过了一些明显的东西.
adLDAP.php早期实例化adLDAP类:
<?php
namespace adLDAP;
require_once(dirname(__FILE__) . '/collections/adLDAPCollection.php');
require_once(dirname(__FILE__) . '/classes/adLDAPGroups.php');
require_once(dirname(__FILE__) . '/classes/adLDAPUsers.php');
require_once(dirname(__FILE__) . '/classes/adLDAPFolders.php');
require_once(dirname(__FILE__) . '/classes/adLDAPUtils.php');
require_once(dirname(__FILE__) . '/classes/adLDAPContacts.php');
require_once(dirname(__FILE__) . '/classes/adLDAPExchange.php');
require_once(dirname(__FILE__) . '/classes/adLDAPComputers.php');
class adLDAP {
等等
我正在使用ADLDAP库(http://adldap.sourceforge.net)与Active Directory进行交互.我正在使用PHP.我想从Active Directory获取所有用户并将其保存到阵列.有没有办法做到这一点?