2017-09-29 3 views
0

PHP를 사용하지 않고 LDAP를 통해 사용자를 인증 할 수있는 방법이 있습니까? 불행하게도 대부분의 공유 호스트는 LDAP 모듈을 가지고 있지 않습니다. 나는 현재 localhost에서 ldap 모듈을 사용하여 다음과 같은 작업을 수행하고 있지만 cURL 또는 file_get_contents 등과 같은 다른 방법으로 동일한 작업을 수행하고 싶습니다. 어떤 도움도 좋을 것입니다. 감사합니다PHP와 LDAP를 사용하여 컬링으로 인증하기

$ldap_connect = ldap_connect("server.ip", 389); 
ldap_set_option($ldap_connect, LDAP_OPT_NETWORK_TIMEOUT, 4); 

     $ldap_fqdn_user=$samaccountname. "@" . $ldap_domain; 

     if (!($bind = ldap_bind($ldap_connect, $ldap_fqdn_user, $ldap_password))) { 
      ldap_close($ldap_connect); 
      echo "Incorrect Username or Password"; 
     } else { 
      ldap_close($ldap_connect); 
      echo "Correct username and password"; 
     } 
+0

일반적으로 LDAP를 제공 (라인 10) http://www.forumsys.com/tutorials/integration-how-to/ldap/online-ldap-test-server/

감사 인증의 내부/현장 방법, 공유 호스트는 이것을 허용 할 이유가 없을 것입니다. 가장 좋은 방법은 LDAP 서버에 대한 내부적 인 인증 요청을 처리하는 로컬 서버에 API를 설치하는 것입니다. 그 자체로 보안 위험이 있습니다. – MackieeE

+0

ofc 당신은 socket_ api로 수동으로 LDAP 프로토콜을 다시 구현할 수 있지만 많은 작업이 될 것입니다. – hanshenrik

+0

PHP를 사용하여 순전히 LDAP 서버 프로토콜을 구현할 수는 있지만 그렇게하고 싶지는 않습니다. 따라서 정상적인 결정은 PHP의 LDAP 모듈이없는 설정을 지원하지 않아야합니다. 모든 가난한 설정을 지원하기 위해 발 뒤꿈치를 넘을 필요가 없습니다. – Mjh

답변

0

다행스럽게도 curl은 LDAP를 기본적으로 지원합니다. 내가 직접 사용한 적이,하지만 난에 해당하는 curl_setopt 여기

curl_setopt_array ($ch, array (
     CURLOPT_PROTOCOLS => CURLPROTO_LDAP, 
     CURLOPT_PORT => 389, 
     CURLOPT_URL => 'server.ip', 
     CURLOPT_TIMEOUT => 4, 
     CURLOPT_USERPWD => $ldap_fqdn_user . ':' . $ldap_password 
)); 

것 추측 완벽하게 동작하는 예제, 암호/올바른 컬 잘못된 경우,

<?php 
declare(strict_types = 1); 
header ("content-type: text/plain;charset=utf8"); 
$ch = curl_init(); 
curl_setopt_array ($ch, array (
     CURLOPT_PROTOCOLS => CURLPROTO_LDAP, 
     CURLOPT_PORT => 389, 
     CURLOPT_URL => 'ldap.forumsys.com', 
     CURLOPT_TIMEOUT => 4, 
     CURLOPT_USERPWD => 'cn=read-only-admin,dc=example,dc=com:password' 
)); 
if (curl_exec ($ch)) { 
    echo "correct password"; 
} else { 
    echo "maybe wrong password? curl got an error. errno:" . curl_errno ($ch) . '. error: ' . curl_error ($ch); 
} 
curl_close ($ch); 

변화 암호에 대한 확인 예를 들어 paswordd이고 실패합니다. 공개 테스트 서버를

+0

게시 한 코드를 읽을 수 없으므로 LDAP (SS1, TLS, GSS-API, GSS-API + SASL)에 대한 다른 인증 메커니즘의 주제를 다루지 않습니다. 게시 한 코드는 LDAP 서버와 동일한 네트워크에있는 경우에만 사용할 수 있습니다. LDAP 서버는 389/636 포트를 공개적으로 노출시킬 수 있습니까? 당신이 완전히 이해하지 못하는 무언가를하는 테스트되지 않은 코드의 덩어리를 게시 할 때의 요점은 무엇입니까? – Mjh

+0

@Mjh 그의 예제 코드에서 그는 암호화되지 않은 버전의 LDAP 용인 389 번 포트를 사용하고 있으므로 포트하려는 코드는 암호화되지 않은 LDAP를 사용하고 있습니다. LDAPS를 사용하려면 포트 636을 사용해야하며 CURLPROTO_LDAPS를 사용해야합니다. 또한 나는 당시 포맷팅에 사용했던 당시의 IDE에 액세스 할 수 없었기 때문에 포맷팅 문제가있었습니다.하지만 지금은해야합니다. '당신이 완전히 이해하지 못하는 무언가를하는, 테스트되지 않은 코드를 덩어리로 올리는 것은 무엇이겠습니까? '글쎄, 이론적으로는 문서화가 작동해야하기 때문에. – hanshenrik

+0

내가하고자하는 요점은 특정 시나리오에서만 작동하는 코드 묶음을 제공한다는 것입니다. 그 시나리오는 cURL을 통한 컴퓨터 요청이 ** 동일한 도메인/네트워크에 있어야한다는 것입니다 LDAP 서버로. 내가 시도하고있는 또 다른 요점은 사람들이 절대적 진리로 간주 할 때 대답할만한 대답을 내고 있다는 것입니다. 당신은 그것을 확장 할 수 있었고,주의 사항을 추가 할 수 있었을 것입니다. 그것은 내가 물었던 것에 우리를 데려옵니다 - 요점은 무엇입니까? 요점은 가상 명성을 수집하는 것입니다. 권리? – Mjh

관련 문제