문제

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

배에는 여러 패키지가 있습니다. http://pear.php.net/search.php?q=ldap&in=packages&x=0&y=0

나는 어느 쪽도 사용하지 않았지만 한 시점에 가고 있었고 그들은 그들이 일 해야하는 것처럼 보였다.

완전한 예제를 찾는 사람들은 확인하십시오 http://www.exchangecore.com/blog/how-us-ldap-active-directory-authentication-php/.

Windows Server 2003 웹 서버 (IIS6)와 IIS 8을 실행하는 Windows Server 2012 엔터프라이즈에서 Windows Server 2003 및 Windows Server 2008 R2 도메인 컨트롤러 에이 연결을 테스트했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top