PHP+APACHE+LDAP+SSO:如何获取当前用户MemberOf和DisplayName属性?
我有一个web应用程序,当前要求用户在登录页面中填写用户名和密码。我的想法是使用SSO来避免手动输入这些信息 在修改了几个小时的httpd.conf文件之后,我能够让我的web应用程序使用$u服务器['PHP_AUTH_USER']获取当前窗口的用户名;指挥部 不幸的是,为了比较应用程序内部的一些访问权限,我还需要他当前所在的组。在本例中,它将是Active Directory memberOf属性 考虑到不会进行手动登录,如何获取memberOf属性?我应该再次查询用户以获取此信息,还是有更好的方法 顺便说一下,我目前正在使用: Apache版本2.4.33 x64 PHP版本7.2.4 x64 WAMPServer版本3.1.3 x64 Windows Server 2008 x64 为了便于比较,我使用当前代码检索组和DisplayName属性。它工作正常,但需要手动输入用户和密码:PHP+APACHE+LDAP+SSO:如何获取当前用户MemberOf和DisplayName属性?,php,windows,apache,ldap,single-sign-on,Php,Windows,Apache,Ldap,Single Sign On,我有一个web应用程序,当前要求用户在登录页面中填写用户名和密码。我的想法是使用SSO来避免手动输入这些信息 在修改了几个小时的httpd.conf文件之后,我能够让我的web应用程序使用$u服务器['PHP_AUTH_USER']获取当前窗口的用户名;指挥部 不幸的是,为了比较应用程序内部的一些访问权限,我还需要他当前所在的组。在本例中,它将是Active Directory memberOf属性 考虑到不会进行手动登录,如何获取memberOf属性?我应该再次查询用户以获取此信息,还是有更好
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环境中使用真正的SSO,即使用HTTP POST绑定的SAML2,您很难使用simplesaml库: 我会推荐这个库而不是任何尝试,来实现一个hack。。。使用simplesaml,您可以获得功能齐全的行业标准SSO,它可以轻松地与其他身份提供程序(如Windows上的ADF)连接 嗯