2016-09-08 1 views
0

사용자를 인증하기 위해 활성 디렉토리와 연결하려고합니다. 그러나 그것은 당신에게 물마루를 끼워 넣는 것처럼 당신이 타이핑하는 것이 중요하지 않습니다.PHP ldap 연결이 항상 사실임

올바른 연결을 설정했는지 확신 할 수 없습니다. 을 호스트 이름으로 사용합니다. 현재 [ip address]. [domain] .nl 을 사용하고 있는데 이것이 가능한지 여부는 알 수 없지만 ldap_connect()에서 오류를 확인했을 때 오류가 발생하지 않았습니다.

여러분이 코드를 살펴보고 팁을 주려고한다면, 좋을 것입니다. 보안상의 이유로 연결 세부 정보를 생략했습니다.

만약 이것이 어리석은 질문이라면 sry하지만 나는 틀린 것에 대한 생각을 가지고 있습니다. 미리 감사드립니다.

class LOGIN{ 
     public function login($data){ 

      $user = $data["username"]; 
      $password = $data["password"]; 
      $host = 'ldap://[ip adress]/[domain].nl'; 
      $domain = '[domain].nl'; 
      $basedn = 'dc=[domain],dc=nl'; 

      $ad = ldap_connect($host.$domain,389) or die('Could not connect to LDAP server.'); 

      ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3); 
      ldap_set_option($ad, LDAP_OPT_REFERRALS, 0); 

      //$bind = ldap_bind($ad, "[email protected]$domain", $password) or die('Could not bind to AD.'); 

      if(@ldap_bind($ad, "$user"."@"."$domain", $password)){ 

       $result = "Authenticated"; 

      }else{ 
       $result = "Invalid Credential"; 
      }    

      return $result; 
     } 
    } 
} 

$login = new LOGIN; 

그리고이 로그인 할 수있는 형태이다 :

<?php 
if(isset($_POST['username']) && isset($_POST['password']) && !empty($_POST['username']) && !empty($_POST['password'])){ 

require_once("classes/class_login.php"); 

$result = $login->login($_POST); 

} 
?> 

<form action="#" method="POST"> 
    <?php if(!empty($result)){echo "<p>".$result."</p>";} ?> 
    <pre> 
    <label for="username">Username: </label><input id="username" type="text" name="username" /> 
    <label for="password">Password: </label><input id="password" type="password" name="password" />  

    <input type="submit" name="submit" value="Submit" /> 
    </pre> 
</form> 

답변

0

자네 말이 맞아, 아마도 API에 문제가있다, 항상 true를 돌려줍니다. 이것이 우리가 사용한 작업 구현입니다.

define('LDAP_OPT_DIAGNOSTIC_MESSAGE', 0x0032); 
    $conn = "ldap://whatever.com"; // 
    $port = "389";  // by default port 389 
    $version = "3";  // by default 3 
    $referral = "0"; // by default 0 
    $user = "username"; 
    $password = "password"; 

    if ($user && $password) { 
     //Connect LDAP Server 
     echo " connecting to ldap mdec<br/> "; 
     $connect = ldap_connect($conn, $port); 
     ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, $version); 
     ldap_set_option($connect, LDAP_OPT_REFERRALS, $referral); 

     $bind = ldap_bind($connect, $user, $password); 
     if ($bind) { 
      echo "OK. "; 
     } else { 
      echo "couldn't bind."; 
      if (ldap_get_option($connect, LDAP_OPT_DIAGNOSTIC_MESSAGE, $extended_error)) { 
       echo "Error connecting to LDAP: $extended_error"; 
      } else { 
       echo "Error connecting to LDAP: No additional information is available."; 
      } 
     } 
     ldap_close($connect); 
    } else { 
     echo "in else, do whatever you want to show to the user"; 
    } 
+0

CMD에서 올바른 DN을 찾아 수정했습니다. 그러나 귀하의 대답은 오류 메시지를 추가함으로써 도움이되었습니다. 감사! – NOTHING

0

ldap_connect 제공된 URI 소요 문법적 정확성을 검사한다. NO 서버에 연결되었습니다!

실제 연결은 서버에 처음으로 호출 할 때 생성되며 (보통 ldap_bind) 연결 문제가 ldap_bind 명령에 나타날 수 있습니다!

게다가 ldap_connectldap://ldap.example.com:1234 또는 ldaps://192.168.1.1:4567과 같은 LDAP-URI를 포함하는 단일 매개 변수로 호출해야합니다. 두 매개 변수 hostnameport은 더 이상 사용되지 않으므로 더 이상 사용하지 마시고 안전한 연결을 위해 사용할 방법이 없기 때문에 이후 버전의 PHP에서 제거 될 수 있습니다. 항상 ldap_connect('ldap://ldap.example.com:1234');처럼 부르세요!