ldapldap 시작하기

비고

이 섹션에서는 ldap의 개요와 개발자가 왜 그것을 사용하고 싶어하는지에 대한 개요를 제공합니다.

또한 ldap 내의 커다란 주제를 언급하고 관련 주제에 링크해야합니다. LDAP 용 문서가 새롭기 때문에 이러한 관련 주제의 초기 버전을 만들어야 할 수도 있습니다.

LDAP와 작동하도록 PHP 설정하기

LDAP 서버를 올바르게 구성했으면 이제 연결하려고합니다. 예를 들어 PHP를 사용합니다.

  • DN = 고유 이름. 즉, 데이터베이스의 어느 부분에서 작업하고 있는지를 나타냅니다. 사용자 또는 그룹 (또는 구성 설정)이 될 수 있습니다.
  • 항목 : 엔티티 (예 : 사용자).
  • 속성 : 이름, 전화 번호 및 전자 메일 주소와 같은 항목 내부의 내용입니다.

연결 중

먼저 다음을 정의합니다.

$server = "server.example.com";  //this is the LDAP server you're connecting with
$ds = ldap_connect("ldaps://$server", 636); //always connect securely via LDAPS when possible

이제, 우리는 연결되어 있습니다. 다음으로 우리가 원하는 것은 서버가 우리가 신뢰할 수있는 사람임을 알리는 것입니다. 가장 쉬운 솔루션은 루트 DN 또는 데이터베이스를 볼 수있는 적절한 권한이있는 기존 사용자를 사용하는 것입니다 (데이터베이스의 모든 사용자가 기본적으로이 작업을 수행 할 수 있습니다). 우리는 bind 함수를 사용하여 인증합니다.

옵션 설정

먼저 이러한 옵션을 선언합니다. 서버 구성에 따라이 설정을 생략 할 수 있습니다.

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

제본

admin과 password를 사용한다고 가정하면 pass123notsafe입니다.

$dn = "uid=admin,cn=users,dc=server,dc=example,dc=com";
$pass = "pass123notsafe";
$ldapbind = ldap_bind($ds, $dn, $pass); //this is the point we are authenticating

매우 좋군. 이제 우리는 많은 다른 작업을 수행 할 수 있습니다. 예를 들어 사용자 및 그룹을 검색, 읽기, 쓰기 및 수정할 수 있습니다.

수색

그룹 "users"의 모든 구성원을 표시한다고 가정 해보십시오.

$dn = "cn=users,dc=server,dc=example,dc=com"; //very important: in which part of your database are you looking
$filter = "uid=*"; //don't filter anyone out (every user has a uid)
$sr = ldap_search($ds, $dn, $filter) or die ("bummer"); //define your search scope

$results = ldap_get_entries($ds, $sr); //here we are pulling the actual entries from the search we just defined
var_dump($results); //will give you all results is array form. 

foreach 루프를 사용하여 좋은 방식으로 데이터를 표시 할 수 있습니다.

알 겠어? 이제 필터링을 진행하십시오. 이메일 주소를 등록한 "자전거 소유자"그룹의 사용자 만 표시하려고합니다. 모든 사용자가 cn = users에 있다는 것을 아는 것이 중요합니다. 이 옆에는 다른 그룹의 구성원이 될 수도 있습니다.

//did the connecting and binding

$dn = "cn=bikeowners,cn=groups,dc=server,dc=example,dc=com"; //note the extra "cn=groups" for looking in a group that is not "users"
$filter = "email=*"; //email address must be set but can be anything
$sr = ldap_search($ds, $dn, $filter) or die ("bummer"); //define your search scope

이제 ldap_get_entries 다시 진행하십시오.

항목 가져 오기의 효율성

엔트리 당 많은 속성을 가진 큰 데이터베이스에서 효율성이 해결되는 사례. 특히 jpegphoto 속성에 그림을 저장하면 항목을 선택적으로 가져올 때로드 시간이 크게 줄어들 수 있습니다.

그룹 "자전거 소유자"에있는 사용자를 찾고 싶다고 가정 해보십시오. 이 엔트리에는 많은 정보가 저장되어 있습니다. cn, uid, name, displayname, mail, 이니셜, 모바일, 전화 번호, 거리, 우편 주소, 우편 번호 및 jpegphoto와 같은 속성이 있다고 가정 해 봅시다. 이제 우리는 그들의 UID, 이름 및 머리 글자 만 필요합니다.

이를 위해 ldap_search의 선택적 4 번째 매개 변수를 사용합니다.

$dn = "cn=bikeowners,cn=groups,dc=server,dc=example,dc=com";
$filter = "uid=*"; //
$justhese = array("uid", "name", "initials");
$sr = ldap_search($ds, $dn, $filter, $justthese) or die ("bummer"); //define your search scope

그리고 ldap_get_entries 를 실행하면 이러한 데이터 만 제공됩니다.

고급 필터링

물론 LDAP를 사용하여 전체 데이터베이스를 가져와 PHP로 처리 할 수 ​​있습니다. 그러나 MySQL과 마찬가지로 서버 측 처리가 훨씬 효율적입니다. 이를 증명하기 위해 고급 필터를 사용할 수 있습니다.

위의 예제 중 하나를 시작점으로 사용하지만 아래 줄에 따라 $ filter를 변경하십시오. 이 예에서는 활성화 된 사용자의 데이터를 표시하려고합니다. 일반적으로 shadowexpire 속성은이 정보를 저장하는 데 사용됩니다. 그러나 이것은 다양한 LDAP 시스템간에 다를 수 있습니다. 뿐만 아니라 활성화 된 사용자를 표시 할뿐만 아니라 이름 "a"로 시작해야하며 암스테르담에 있어야합니다.

기본적으로 다음과 같은 세 가지 작업을 수행하려고합니다.

  1. 가장 쉬운 방법 : 암스테르담에 거주해야합니다. 이 예에서 거주지는 'postaladdress'속성에 저장됩니다.
$filter= "postaladdress=Amsterdam";
  1. 이름은 "a"로 시작해야합니다. 이 예에서 UID는 이름에서 작성되므로 다음과 같습니다.
$filter= "uid=a*";
  1. 사용자가 활성 상태 여야합니다. 이 값은 기본 속성 인 shadowexpire 에 값 -1 이 저장됩니다. 서버 구성에 따라, shadowexpire 는 무수히 많은 값을 가질 수 있습니다. 심지어 날짜도 가능합니다. 사용자가 비활성 상태이면 shadowexpire1 됩니다. 실제로 비활성 인 사용자를 제외한 모든 사용자를 확보하려면 shadowexpire = -1 에서 필터링하도록 선택하지 마십시오. 대신에 우리는 사람들이 활동 하지 않기를 바란다고 말합니다.
$filter= "(!(shadowexpire=1))"; //NOT is represented with "!"

이제 가장 흥미로운 부분 : 세 가지 예를 모두 결합하십시오. 대괄호, AND, OR 및 NOT 식으로이 작업을 수행 할 수 있습니다.

$filter= "(&(postaladdress=Amsterdam)(uid=a*)(!(shadowexpire=1)))";

마지막으로 "|"를 사용하여 OR 구문을 작성할 수 있습니다. 예를 들어 모든 사용자가 "a"또는 "b"로 시작하는 경우,

$filter= "(|(uid=a*)(uid=n*))";

끊임없이 결합하여 아주 인상적인 필터를 만들 수 있습니다.