Giao thức truy cập nhanh LDAP Lightweight Directory Access Protocol

Hiện nay, để xây dựng các hệ thống lớn, điều quan trọng đặt ra là phải làm cách nào để có thể tích hợp dữ liệu để từ đó có thể dùng chung giữa các hệ thống khác nhau. Trong đó, tích hợp tài khoản của người sử dụng là vấn đề cần thiết nhất trong những cái quan trọng trên.

Hãy tưởng tượng một hệ thống với khoảng 5 – 6 module khác nhau, mỗi module lại được thiết kế trên một nền tảng khác nhau (Có ông thì dùng Oracle + AS Portal, có người thì xài DB2 với WebSphere, lão khác thì MySQL với phpnuke, ông thì xài Window, lão thì cài Linux, có người lại chỉ thích Unix…), do đó cần có một hệ thống người dùng khác nhau. Vậy thì với mỗi mô đun, người sử dụng cần phải có một tài khoản, một mật khẩu khác nhau, đó là điều không thể chấp nhận được. Người dùng chẳng mấy chốc mà chán ghét hệ thống.

Làm cách nào để có thể tích hợp được người dùng giữa các hệ thống trên? Câu trả lời đó là LDAP.
LDAP (viết tắt của Lightweight Directory Access Protocol) dịch ra tiếng Việt có nghĩa là giao thức truy cập nhanh các dịch vụ thư mục.
• Là một giao thức tìm, truy nhập các thông tin dạng thư mục trên máy chủ.
• Nó là giao thức dạng Client/Server dùng để truy cập dịch vụ thư mục.
• LDAP chạy trên TCP/IP hoặc các dịch vụ hướng kết nối khác.
• Là một mô hình thông tin cho phép xác định cấu trúc và đặc điểm của thông tin trong thư mục.
• Là một không gian tên cho phép xác định cách các thông tin được tham chiếu và tổ chức
• Một mô hình các thao tác cho phép xác định các tham chiếu và phân bố dữ liệu.
• Là một giao thức mở rộng
• Là một mô hình thông tin mở rộng.

Ở đây chúng ta cần tránh hiểu nhầm từ thư mục như trên Windows là folder hay directory, đó là thư mục theo nghĩa hẹp để quản lý hệ thống tệp tin. Từ thư mục trong LDAP mang ý nghĩa rộng hơn, nó bao hàm các cấu trúc dữ liệu dạng liệt kê theo thư mục (hay mục lục) – một từ khoá của dân thư viện nhằm ám chỉ cách thức sắp xếp dữ liệu để tiện truy xuất nhất.

– Làm việc với LDAP thông qua PHP

Trình tự cơ bản khi có thao tác với LDAP gồm các bước
• Connect (kết nối với LDAP)
• Bind (kiểu kết nối: nặc danh hoặc đăng nhập xác thực)
• Search (tìm kiếm)
• Interpret search (xử lý tìm kiếm)
• Result (kết quả)
• Close connection (đóng kết nối)

– Ldap_connect(): 
hàm kết nối tới máy chủ LDAP, hàm này có 2 tham số: hostname (tên máy chủ LDAP) và port (cổng kết nối, mặc định là cổng 389)
Ldap_connect(string hostname, int port);

<?php

// LDAP variables
$ldaphost “ldap.example.com”// your ldap servers
$ldapport 389// your ldap server’s port number

// Connecting to LDAP
$ldapconn ldap_connect($ldaphost$ldapport)
or die(
“Không thể kết nối được đến $ldaphost”);

?>

– Ldap_bind(); 
Hàm nối kết với server LDAP để có thể thao tác với LDAP
Vd kết nối với LDAP server bằng user và password hợp lệ

<?php

// using ldap bind
$ldaprdn ‘uname’// ldap rdn or dn
$ldappass ‘password’// associated password

// connect to ldap server
$ldapconn ldap_connect(“ldap.example.com”)
or die(
“Could not connect to LDAP server.”);

if ($ldapconn) {

// binding to ldap server
$ldapbind ldap_bind($ldapconn$ldaprdn$ldappass);

// verify binding
if ($ldapbind) {
echo 
“LDAP bind successful…”;
} else {
echo 
“LDAP bind failed…”;
}

}

?>

– Nếu kết nối bằng quyền anonymously

<?php

//using ldap bind anonymously

// connect to ldap server
$ldapconn ldap_connect(“ldap.example.com”)
or die(
“Could not connect to LDAP server.”);

if ($ldapconn) {

// binding anonymously
$ldapbind ldap_bind($ldapconn);

if ($ldapbind) {
echo 
“LDAP bind anonymous successful…”;
} else {
echo 
“LDAP bind anonymous failed…”;
}

}

?>

– ldap_search();
ldap_search ( resource link_identifier, string base_dn, string filter [, array attributes [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]] )
Ví dụ tìm kiếm các thông tin của tất cả mọi người ở trong “My Company” nơi surname hoặc given name chứa trong biến $person. Ví dụ này yêu cầu server tìm ra thông tin của nhiều hơn một thuộc tính cần tìm kiếm.

<?php
// $ds is a valid link identifier for a directory server

// $person is all or part of a person’s name, eg “Jo”

$dn “o=My Company, c=US”;
$filter=“(|(sn=$person*)(givenname=$person*))”;
$justthese = array(“ou”“sn”“givenname”“mail”);

$sr=ldap_search($ds$dn$filter$justthese);

$info ldap_get_entries($ds$sr);

echo $info[“count”].” entries returned\n”;
?>

– Ldap_close();

Hàm đóng kết nối với LDAP, hàm này tương đương với ldap_unbind();
bool ldap_unbind ( resource link_identifier );
Nếu kết nối đóng thành công sẽ trả về giá trị TRUE, ngược lại là FALSE.

– ldap_add();

Hàm thêm các entry vào thư mục LDAP

bool ldap_add ( resource link_identifier, string dn, array entry )

<?php
$ds 
ldap_connect(“localhost”); // assuming the LDAP server is on this host

if ($ds) {
// bind with appropriate dn to give update access
$r ldap_bind($ds“cn=root, o=My Company, c=US”“secret”);

// prepare data
$info[“cn”] = “John Jones”;
$info[“sn”] = “Jones”;
$info[“mail”] = “jonj@example.com”;
$info[“objectclass”] = “person”;

// add data to directory
$r ldap_add($ds“cn=John Jones, o=My Company, c=US”$info);

ldap_close($ds);
} else {
echo 
“Unable to connect to LDAP server”;
}
?>

– ldap_delete();

Xóa một entry khỏi thư mục LDAP

bool ldap_delete ( resource link_identifier, string dn )

Hàm trả về giá trị TRUE nếu xóa thành công và FALSE nếu thất bại.
– ldap_compare();

So sánh giá trị của một thuộc tính

mixed ldap_compare ( resource link_identifier, string dn, string attribute, string value )

Ví dụ:

<?php

$ds=ldap_connect(“localhost”); // assuming the LDAP server is on this host

if ($ds) {

// bind
if (ldap_bind($ds)) {

// prepare data
$dn “cn=Matti Meikku, ou=My Unit, o=My Company, c=FI”;
$value “secretpassword”;
$attr “password”;

// compare value
$r=ldap_compare($ds$dn$attr$value);

if ($r === –1) {
echo 
“Error: ” ldap_error($ds);
} elseif (
$r === true) {
echo 
“Password correct.”;
} elseif (
$r === false) {
echo 
“Wrong guess! Password incorrect.”;
}

} else {
echo “Unable to bind to LDAP server.”;
}

ldap_close($ds);

} else {
echo “Unable to connect to LDAP server.”;
}
?>

– Ldap_count_entries();

Đếm số lượng các entry được tìm thấy từ kết quả của lệnh tìm kiếm.

int ldap_count_entries ( resource link_identifier, resource result_identifier )
ldap_error();

trả lại thông báo lỗi LDAP của lệnh LDAP cuối cùng.

string ldap_error ( resource link_identifier )
– ldap_first_attribute();
hàm trả lại thuộc tính đầu tiên của entry

string ldap_first_attribute ( resource link_identifier,
resource result_entry_identifier,
int &ber_identifier )

– ldap_first_entry();

Trả lại kết quả id đầu tiên của entry

ldap_first_entry ( resource link_identifier, resource result_identifier )

– ldap_first_reference();

trả lại tham chiếu đầu tiên

ldap_first_reference ( resource link, resource result )

– ldap_free_result();

giải phóng kết quả bộ nhớ

bool ldap_free_result ( resource result_identifier )

Chúc bạn thành công với LDAP

FOLLOW US

Leave a Reply

Your email address will not be published. Required fields are marked *