[php] Active Directory를 통해 LDAP를 사용하여 PHP에서 인증

PHP로 LDAP를 통해 사용자를 인증하는 방법을 찾고 있습니다 (Active Directory가 공급자가 됨). 이상적으로는 IIS 7에서 실행할 수 있어야합니다 ( adLDAP 는 Apache에서 ). 비슷한 일을 성공한 사람이 있습니까?

  • 편집 : 준비된 코드가있는 라이브러리 / 클래스를 선호합니다 … 누군가 이미 그렇게했을 때 바퀴를 발명하는 것은 어리석은 일입니다.


답변

기본적으로 두 줄의 코드 만 있으면 전체 라이브러리를 가져 오는 것이 비효율적으로 보입니다.

$ldap = ldap_connect("ldap.example.com");
if ($bind = ldap_bind($ldap, $_POST['username'], $_POST['password'])) {
  // log them in!
} else {
  // error message
}


답변

Active Directory에서 사용자를 인증하는 것은 라이브러리없이 PHP에서 LDAP를 사용하는 매우 간단한 프로세스라고 생각할 것입니다. 그러나 매우 빠르게 복잡하게 만들 수있는 많은 것들이 있습니다.

  • 입력을 확인해야합니다. 그렇지 않으면 빈 사용자 이름 / 암호가 전달됩니다.
  • 바인딩 할 때 사용자 이름 / 암호가 올바르게 인코딩되었는지 확인해야합니다.
  • TLS를 사용하여 연결을 암호화해야합니다.
  • 하나가 다운 된 경우 중복성을 위해 별도의 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...
}

위의 인증 호출은 다음과 같습니다.

  • 사용자 이름이나 비밀번호가 비어 있지 않은지 확인합니다.
  • 사용자 이름 / 암호가 올바르게 인코딩되었는지 확인합니다 (기본적으로 UTF-8).
  • 하나가 다운 된 경우 대체 LDAP 서버를 사용해보십시오.
  • TLS를 사용하여 인증 요청을 암호화합니다.
  • 실패한 경우 추가 정보 제공 (예 : 잠긴 / 비활성화 된 계정 등)

이 작업을 수행 할 다른 라이브러리도 있습니다 (예 : Adldap2). 그러나 가장 찬성 된 답변은 실제로 입력 유효성 검사를 수행하지 않고 TLS를 사용하지 않고 의존 할 수있는 보안 위험이기 때문에 몇 가지 추가 정보를 제공 할 수밖에 없다고 느꼈습니다.


답변

사용자 자격 증명을 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 도메인 컨트롤러에 연결하는 것을 테스트했습니다.


답변