簡體   English   中英

PHP LDAP連接可從外部服務器對Active Directory進行身份驗證

[英]PHP LDAP Connection to Authenticate against Active Directory from External Server

我有一個外部Web服務器試圖通過LDAP對內部服務器上的Active Directory進行身份驗證。 我可以在本地進行連接和身份驗證,盡管使用相同的代碼(切換主機和端口)無法在外部進行身份驗證。 我們還有其他能夠連接和認證的服務,例如Attask(http://www.attask.com/)。

外部服務器當前是Media Temple上的Linux(gs),運行PHP 5.3.15,並且已啟用LDAP支持。

內部服務器當前是帶有LDAP和Active Directory的Windows Server 2008。

下面的代碼是我正在使用的當前PHP,該PHP能夠在本地連接,但是在外部服務器上有問題。 它基本上使用PHP LDAP連接字符串並嘗試進行綁定。 如果失敗,它將嘗試匿名綁定。 兩者都無法在外部工作,並返回錯誤:無法聯系LDAP服務器。

<?php
$username = 'username';
$password = 'password';

$ldapconfig['host'] = '00.000.000.000';
$ldapconfig['port'] = '636';
$ldapconfig['basedn'] = 'dc=client,dc=eqc,dc=local';

$ds=ldap_connect($ldapconfig['host'], $ldapconfig['port']);

ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
ldap_set_option($ds, LDAP_OPT_NETWORK_TIMEOUT, 10);

$dn="".$username."";

if ($bind=ldap_bind($ds, $dn, $password)) {
  echo("Login correct");
} else {

  echo("Unable to bind to server.</br>");

  echo("msg:'".ldap_error($ds)."'</br>".ldap_errno($ds)."");

  if ($bind=ldap_bind($ds)) {

    $filter = "(cn=*)";

    if (!($search=@ldap_search($ds, $ldapconfig['basedn'], $filter))) {
      echo("Unable to search ldap server<br>");
      echo("msg:'".ldap_error($ds)."'</br>");
    } else {
      $number_returned = ldap_count_entries($ds,$search);
      $info = ldap_get_entries($ds, $search);
      echo "The number of entries returned is ". $number_returned."<p>";
      for ($i=0; $i<$info["count"]; $i++) {
        var_dump($info[$i]);
      }
    }
  } else {
    echo("Unable to bind anonymously<br>");
    echo("msg:".ldap_error($ds)."<br>");
  }
}
?>

一些注意事項:

  • 外部LDAP服務器正在使用LDAPS,因此建議的主機在端口636上為ldaps://00.000.000.000

  • 我已經嘗試與“用戶名”以及“用戶名@ 00.000.000.000”綁定

  • 有一個防火牆,但是,外部服務器可以成功ping通內部LDAP服務器,因此在該級別上進行連接。

任何幫助將不勝感激。 如果有服務器設置或類似性質的事情,不妨了解一下。 另外,我已經檢查了ADFS,雖然找不到一個簡單的腳本來進行測試,但是如果不起作用,則會花費大量時間無休止地進行測試。

從Linux機器使用LDAPS連接到AD時,我總是不得不添加該行

TLS_REQCERT never

在/etc/ldap.conf或等效文件中(可能需要重新啟動apache-不確定)。 您也可以為主機嘗試格式“ ldaps://server.domain.tld:636”,盡管我認為這不是問題。

我在http://en.gentoo-wiki.com/wiki/Active_Directory_Authentication_using_LDAP中找到了一些不錯的文檔,盡管目前看來該文檔已經不存在了。 Google的緩存版本: http : //webcache.googleusercontent.com/search? q=cache: http : //en.gentoo-wiki.com/wiki/Active_Directory_Authentication_using_LDAP

您是否檢查過SSL證書錯誤? 您使用的是自簽名證書還是正式證書?

“如果你正在使用SSL(如LDAPS)和的ldap_bind拋出‘無法綁定到服務器:’錯誤,請檢查在ldap_connect使用的主機名的SSL證書中相匹配的‘CN’的LDAP服務器” 來源

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM