[英]PHP + APACHE + LDAP + SSO: How to get the current user MemberOf and DisplayName attribute?
我有一個Web應用程序,當前要求用戶在登錄頁面中填寫用戶名和密碼。 我的想法是使用SSO來避免手動輸入這些信息。
經過幾個小時的修改httpd.conf文件,我可以使我的Web應用程序使用$_SERVER['PHP_AUTH_USER'];
獲取當前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環境中使用帶有HTTP POST綁定的SAML2來實現“真正的” SSO,則幾乎不會遇到simplesaml庫: https ://simplesamlphp.org/
我會建議您嘗試使用此庫來實施入侵……使用simplesaml,您將獲得功能齊全的行業標准SSO,可以輕松地與其他身份提供商(例如Windows上的ADFS)連接。
心連心
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.