У меня есть веб-приложение, которое в данный момент просит пользователя ввести имя пользователя и пароль на странице входа.Моя идея состоит в том, чтобы использовать SSO , чтобы избежать ручного ввода этой информации.
После нескольких часов изменения файла httpd.conf я смог сделать свой вебприложение получает имя пользователя текущего окна с помощью команды $_SERVER['PHP_AUTH_USER'];
.
Для сравнения некоторого доступа внутри приложения, к сожалению, мне также нужны группы, в которых он находится в данный момент. В этом случае это будет Active DirectorymemberOf
атрибут
Учитывая, что вход в систему вручную не будет, как я могу получить атрибут memberOf
?Должен ли я снова запросить пользователя, чтобы получить эту информацию, или есть лучший подход?
Кстати, в настоящее время я использую:
- Apache Version 2.4.33 x64
- PHP версии 7.2.4 x64
- WAMPServer версии 3.1.3 x64
- Windows Server 2008 x64
Просто для сравнения, текущий код, который я используючтобы получить группы и атрибут 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;
}