PHP + APACHE + LDAP + SSO: 如何获取当前用户的MemberOf 和DisplayName 属性?

PHP + APACHE + LDAP + SSO: How to get the current user MemberOf and DisplayName attribute?

我有一个 Web 应用程序,当前要求用户在登录页面中填写用户名和密码。我的想法是使用SSO来避免手动输入这些信息。

在修改 httpd.conf 文件几个小时后,我能够让我的 Web 应用程序获得当前 Window 的用户名 $_SERVER['PHP_AUTH_USER'];命令。

要比较应用程序内部的某些访问权限,不幸的是,我还需要他当前所在的组。在这种情况下,它将是 Active Directory memberOf 属性

考虑到手动登录不会,请问如何获取memberOf属性?我应该再次询问用户以获取此信息还是有更好的方法?

顺便说一句,我目前正在使用:

只是为了比较,我用来检索组和 DisplayName 属性的当前代码。它运行良好,但是需要手动输入用户名和密码:

public function Login($user, $pass, $remember = false){
    require_once("ad.class.php");   
    $ldap = new Ldap();
    $ret = $ldap->Bind($user, $pass);

    $redirect = RedirectURL($this->redirect);

    if ($ret){

        $filter = "(&(sAMAccountName=$user))";
        $attributes  = array("displayname","samaccountname","memberof");

        $info = $ldap->GetEntries($filter, $attributes);

        $aGrp = array();
        if (count($info) > 0){
            foreach ($info[0]['memberof'] as $member) {
                $aMember = explode(",", $member);
                $grp = str_replace("CN=\", "", $aMember[0]);
                $grp = str_replace("CN=", "", $grp);
                $aGrp[] = $grp;
            }
        }

        if (!isset($_SESSION)) session_start();

        $_SESSION['session_login'] = array();
        $_SESSION['session_login']['user']  = $info[0]["samaccountname"][0];
        $_SESSION['session_login']['name']  = $info[0]["displayname"][0];
        $_SESSION['session_login']['grp']   = $aGrp;
        $_SESSION['lang']                   = getDefaultLanguage();

        if ($remember){
            $expire = (time() + (15 * 24 * 3600)); //15 dias

            setcookie('cookie_login', $_SESSION['session_login'], $expire);
        }

        accessLog(getCurrentUser(), 'Authorized - LDAP');               
        header("Location: index.php?redirect=" . $redirect);

        return true;
    }else{
        $ret['redirect'] = $redirect;
        $this->errors = $ret; //$this->redirect

        accessLog(getCurrentUser(), 'Access Denied - LDAP');
    }

    return false;
}

SSO 不会将您(您的用户)从身份验证过程中解放出来,最终他们将不得不这样做,但它可能看起来像。

有几个库可用于各种 SSO,但如果您想在 Web 环境中使用 "real" SSO,SAML2 与 HTTP POST 绑定,您几乎无法绕过simplesaml 库:https://simplesamlphp.org/

我会在任何尝试中推荐这个库,以实现黑客攻击...使用 simplesaml 你可以获得一个 full-featured industry-standard SSO,它可以轻松地与其他身份提供者连接,比如 [上的 ADFS] =22=].

hth