【问题标题】:Codeigniter Application with LDAP Authentication具有 LDAP 身份验证的 Codeigniter 应用程序
【发布时间】:2015-03-24 03:11:52
【问题描述】:

没有 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 */

感谢您的帮助

【问题讨论】:

  • 你能发布你的codeigniter代码吗?
  • @NishanthMatha 我已经更新了代码。请检查我不知道如何在 codeigniter $ldapconn = ldap_connect("ip") or die("Could not connect to LDAP server.");$ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass); 中替换/使用这两行
  • 你记得把文件添加到/application/libraries,然后使用$this-&gt;load-&gt;library('library_name');加载库

标签: php codeigniter authentication ldap ldapconnection


【解决方案1】:

我没有找到您要使用的库 (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.');
    }

我实际上不知道如果函数 cleary 存在(并且有效)如您之前所述,为什么会失败。

【讨论】:

    【解决方案2】:

    你好,

    即使这个问题已经存在一年多了(而且您现在可能已经找到了答案),我也会尝试提供一些提示,因为它可能对其他人有所帮助。

    您看到的错误是因为您的 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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-30
      • 2014-09-13
      • 1970-01-01
      • 2015-03-27
      • 2018-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多