使用LDAP身份验证的Codeigniter应用程序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用LDAP身份验证的Codeigniter应用程序相关的知识,希望对你有一定的参考价值。
没有codeigniter,我可以使用ldap_connect(),但在codeigniter项目中,我想使用ldap连接来验证用户的Windows用户名和密码。下面是没有codeigniter的完美工作的代码。
/******LDAP CONNECTIVITY STARTS HERE*********/
$ldaprdn = $_POST['uname']; // ldap rdn or dn
$ldappass = $_POST['upass']; // associated password
$ldaprdn = $_POST['uname'].'@domain.com';
$ldapconn = ldap_connect("ip") or die("Could not connect to LDAP server."); //our ip
if ($ldapconn) {
$ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);
// verify binding
if ($ldapbind) {
//echo "<pre>";
//print_r($row_login);
//exit;
$_SESSION['appusername']=$_POST['uname'];
$_SESSION['emp_code']=$row_login['emp_code'];
$_SESSION['emp_id']=$row_login['emp_id'];
$_SESSION['emp_name']=$row_login['emp_name'];
$_SESSION['emp_email']=$row_login['emp_email'];
$_SESSION['emp_dept_id']=$row_login['emp_dept_id'];
$_SESSION['emp_dept_name']=$row_login['dept_name'];
$_SESSION['emp_group']=$row_login['emp_group'];
$_SESSION['emp_category']=$row_login['emp_category'];
$_SESSION['finance_app_authority']=$row_login['finance_approval_status'];
$_SESSION['line_eng_status']=$row_login['line_eng_status'];
$_SESSION['line_name']=$row_login['line_name'];
$_SESSION['dept_name']=$row_login['dept_name'];
if($row_login['emp_mod_status']=='Y'){ //if moderator means
$_SESSION['userType']='MOD';
}
else if($row_login['emp_id']==$row_login['dept_hod_id']){ //if HOD means
$_SESSION['userType']='HOD';
}else{ //if normal user means
$_SESSION['userType']='EMP';
}
echo '<script language="javascript">document.location.href="?p=main&m=it-home"</script>';
exit;
}
else{
echo '<div class="man_style" style="width:50%;padding:10px 10px 10px 250px !important;text-align:center;color:red;">Invalid password.</div>';
}
}
我想要的是通过codeigniter中的Windows用户名和密码对用户进行身份验证。请给我一个非常简单的方法。
我尝试了Auth_Ldap库,但我仍然收到错误
LDAP功能不存在。加载模块ldap php模块或使用带有ldap支持编译的php。
我使用过Auth_Ldap库文件。以下配置文件不知道在哪里给我的主机IP地址
$config['account_suffix'] = '@abcd.com';
$config['base_dn'] = 'DC=domain,DC=local';
$config['domain_controllers'] = array ("server1.domain.local");
$config['ad_username'] = 'administrator';
$config['ad_password'] = 'password';
$config['real_primarygroup'] = true;
$config['use_ssl'] = false;
$config['use_tls'] = false;
$config['recursive_groups'] = true;
/* End of file adldap.php */
/* Location: ./system/application/config/adldap.php */
非常感谢您的帮助
我没有找到你想要使用的库(Auth_Ldap),但我找到了Auth_Ldap。但是,您的配置文件不同。我下载了这个文件,在这个配置中你清楚地得到了ldap_uri,所以这就是你的主机ip所在的地方。
$config['ldap_uri'] = array('ldap://ldap.mycompany.com:389/');
// $config ['ldap_uri'] = array('ldaps://ldap.mycompany.com:636/'); <-- connect via SSL
$config['use_tls'] = true; // Encrypted without using SSL
$config['search_base'] = 'dc=mycompany,dc=com';
$config['user_search_base'] = array('ou=people,dc=mycompany,dc=com'); // Leave empty to use $config['search_base']
$config['group_search_base'] = array('ou=group,dc=mycompany,dc=com'); // Leave empty to use $config['search_base']
$config['user_object_class'] = 'posixAccount';
$config['group_object_class'] = 'posixGroup';
$config['user_search_filter'] = ''; // Additional search filters to use for user lookups
$config['group_search_filter'] = ''; // Additional search filters to use for group lookups
$config['login_attribute'] = 'uid';
$config['schema_type'] = 'rfc2307'; // Use rfc2307, rfc2307bis, or ad
$config['proxy_user'] = '';
$config['proxy_pass'] = '';
$config['roles'] = array(1 => 'User',
3 => 'Power User',
5 => 'Administrator');
$config['auditlog'] = 'application/logs/audit.log'; // Some place to log attempted logins (separate from message log)
如果所有其他方法都失败了,并且您可以自己编写自己的库,那么这也许是一个想法。
更新:我刚注意到_init()函数中的库失败:
private function _init() {
// Verify that the LDAP extension has been loaded/built-in
// No sense continuing if we can't
if (! function_exists('ldap_connect')) {
show_error('LDAP functionality not present. Either load the module ldap php module or use a php with ldap support compiled in.');
log_message('error', 'LDAP functionality not present in php.');
}
我实际上并不知道为什么如果函数清晰存在(并且正常工作)会失败,如前所述。
你好,
即使这个问题已经超过一年了(你现在可能已经找到了答案),我会尝试提供一些提示,因为它可能对其他人有所帮助。
您看到的错误是因为您的php.ini文件中未启用php_ldap库。因此,尝试在php.ini中找到“; extension = php_ldap.dll”行并通过删除“;”取消注释从此开始。
注意:如果您正在使用XAMPP(对于Windows),那么在重新启动它之后,PHP可能会抱怨一些dll丢失。要解决此问题,您必须将以下dll文件从php文件夹复制到apache / bin:
- libsasl.dll
- 的libeay32.dll
- ssleay32.dll(可选;用于SSL)
以上是关于使用LDAP身份验证的Codeigniter应用程序的主要内容,如果未能解决你的问题,请参考以下文章
从 Spring Boot 应用程序使用 AD LDP 进行 LDAP 身份验证