답변:
기본적으로 두 줄의 코드 만 있으면 전체 라이브러리를 가져 오는 것이 비효율적으로 보입니다.
$ldap = ldap_connect("ldap.example.com");
if ($bind = ldap_bind($ldap, $_POST['username'], $_POST['password'])) {
// log them in!
} else {
// error message
}
ldap_set_option
다른 방식으로 작동하도록하는 데 사용할 수 있습니다 . 프로토콜 버전을 설정하고 있습니까? 실험을해야합니다. 나는 개인적으로 안전을 위해 빈 암호를 확인하는 것이 좋습니다.
ldap_bind
처리와 같이 여기에서 필요하지 않으며 특수 문자는 문제가되지 않습니다.
Active Directory에서 사용자를 인증하는 것은 라이브러리없이 PHP에서 LDAP를 사용하는 매우 간단한 프로세스라고 생각할 것입니다. 그러나 매우 빠르게 복잡하게 만들 수있는 많은 것들이 있습니다.
실제로 대부분의 경우 위를 지원하는 LDAP 라이브러리를 사용하는 것이 더 쉽습니다. 궁극적으로 위의 모든 사항을 처리하는 자체 라이브러리 인 LdapTools를 롤링하게되었습니다 (인증뿐만 아니라 훨씬 더 많은 작업을 수행 할 수 있음). 다음과 같이 사용할 수 있습니다.
use LdapTools\Configuration;
use LdapTools\DomainConfiguration;
use LdapTools\LdapManager;
$domain = (new DomainConfiguration('example.com'))
->setUsername('username') # A separate AD service account used by your app
->setPassword('password')
->setServers(['dc1', 'dc2', 'dc3'])
->setUseTls(true);
$config = new Configuration($domain);
$ldap = new LdapManager($config);
if (!$ldap->authenticate($username, $password, $message)) {
echo "Error: $message";
} else {
// Do something...
}
위의 인증 호출은 다음과 같습니다.
이 작업을 수행 할 다른 라이브러리도 있습니다 (예 : Adldap2). 그러나 가장 찬성 된 답변은 실제로 입력 유효성 검사를 수행하지 않고 TLS를 사용하지 않고 의존 할 수있는 보안 위험이기 때문에 몇 가지 추가 정보를 제공 할 수밖에 없다고 느꼈습니다.
ldaps://
연결 형식을 사용하는 것은 더 이상 사용되지 않습니다. 내 예 setUseTls(true)
에서는 ldap://
형식을 사용하고 ldap_start_tls($connection)
. 따라서 TLS 자체는 더 이상 사용되지 않는 것이 아니라 ldaps://
(실제로 완전히 다른 포트를 통해 LDAP에 연결하는) 사용하여 연결 하는 것입니다.
사용자 자격 증명을 ldap_bind ()에 전달하기 만하면됩니다.
http://php.net/manual/en/function.ldap-bind.php
계정이 LDAP에 바인딩 할 수 있으면 유효한 것입니다. 할 수 없다면 그렇지 않습니다. 계정 관리가 아닌 인증 만하는 경우 라이브러리가 필요하지 않습니다.
저는 Zend_Ldap 클래스를 좋아합니다 . Zend 프레임 워크없이 프로젝트에서이 클래스 만 사용할 수 있습니다.
PHP에는 라이브러리가 있습니다 : http://ca.php.net/ldap
PEAR에는 또한 여러 패키지가 있습니다 : http://pear.php.net/search.php?q=ldap&in=packages&x=0&y=0
나도 사용하지 않았지만 어느 시점에서 사용하려고했는데 작동해야 할 것 같았습니다.
완전한 예제를 찾는 사람들은 http://www.exchangecore.com/blog/how-use-ldap-active-directory-authentication-php/ 를 확인 하십시오. .
Windows Server 2003 웹 서버 (IIS6) 및 IIS 8을 실행하는 Windows Server 2012 엔터프라이즈에서 Windows Server 2003 및 Windows Server 2008 R2 도메인 컨트롤러에 연결하는 것을 테스트했습니다.