Авторизация на сайте с помощью Active Directory напрямую на C++
Добавлено: 29 май 2025, 05:14
Авторизация на сайте с помощью Active Directory напрямую на C++
Необходимые пакеты к установке
Общая идея
Использовать LDAP для аутентификации пользователя в Active Directory.
Написать небольшую C++ программу, которая:
получает имя пользователя и пароль
пытается выполнить LDAP bind с этими данными
возвращает результат (успешно/неуспешно)
Пример кода на C++ с использованием LDAP
Для этого потребуется библиотека OpenLDAP. На Linux её можно установить через менеджер пакетов (например, libldap2-dev).
Сборка программы
Важные моменты
Вам нужно установить библиотеку libldap (apt install libldap2-dev).
Формат DN зависит от вашей Active Directory. Обычно это что-то вроде "CN=username,CN=Users,DC=domain,DC=com" или "UserPrincipalName=username@domain.com".
В реальных приложениях лучше использовать безопасное соединение (LDAPS) и защищать пароли.
Необходимые пакеты к установке
Код: Выделить всё
sudo apt install libldap2-dev
Использовать LDAP для аутентификации пользователя в Active Directory.
Написать небольшую C++ программу, которая:
получает имя пользователя и пароль
пытается выполнить LDAP bind с этими данными
возвращает результат (успешно/неуспешно)
Пример кода на C++ с использованием LDAP
Для этого потребуется библиотека OpenLDAP. На Linux её можно установить через менеджер пакетов (например, libldap2-dev).
Код: Выделить всё
#include <iostream>
#include <ldap.h>
bool authenticate(const std::string& user, const std::string& pass, const std::string& ldap_server, const std::string& base_dn) {
LDAP *ld;
int result;
result = ldap_initialize(&ld, ldap_server.c_str());
if (result != LDAP_SUCCESS) {
std::cerr << "ldap_initialize failed: " << ldap_err2string(result) << std::endl;
return false;
}
// Установка версии LDAP
int version = LDAP_VERSION3;
ldap_set_option(ld, LDAP_OPT_PROTOCOL_VERSION, &version);
// Формируем DN пользователя
std::string user_dn = "CN=" + user + "," + base_dn; // или другой формат DN в вашей AD
// Попытка привязки (bind) с учетными данными пользователя
result = ldap_simple_bind_s(ld, user_dn.c_str(), pass.c_str());
if (result != LDAP_SUCCESS) {
std::cerr << "Bind failed: " << ldap_err2string(result) << std::endl;
ldap_unbind_s(ld);
return false;
}
// Успешная аутентификация
ldap_unbind_s(ld);
return true;
}
int main() {
std::string username, password;
std::cout << "Enter username: ";
std::cin >> username;
std::cout << "Enter password: ";
std::cin >> password;
std::string ldap_server = "ldap://yourdomain.com"; // адрес LDAP сервера
std::string base_dn = "DC=yourdomain,DC=com"; // базовый DN
if (authenticate(username, password, ldap_server, base_dn)) {
std::cout << "Authentication successful!" << std::endl;
} else {
std::cout << "Authentication failed." << std::endl;
}
return 0;
}
Код: Выделить всё
g++ -std=c++11 ldap_auth.cpp -o ldap_auth -lldap
Вам нужно установить библиотеку libldap (apt install libldap2-dev).
Формат DN зависит от вашей Active Directory. Обычно это что-то вроде "CN=username,CN=Users,DC=domain,DC=com" или "UserPrincipalName=username@domain.com".
В реальных приложениях лучше использовать безопасное соединение (LDAPS) и защищать пароли.