[转]iTop集成SSO登录
- https删除:// 删除/article-3553.html
2016.7.20更新
由于绝大多数用户都通过sso登录,因此决定未认证用户之间重定向至sso以提高用户体验。只需要在model.authent-sso.php中class定义的外面判断是否登录,未登录的跳转去sso(注意请求uri为toolkit和setup时不要跳转到sso,否则将导致这两个功能不可用)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | //cron任务忽略sso认证 if(isset($_SERVER['REQUEST_URI')) { //如果访问 toolkit 或者 setup 等工具页面,则不跳转到sso $isToolPage = false; if(preg_match('/^\/toolkit\/|^\/webservices\/|^\/setup\//i',$_SERVER['REQUEST_URI')) { $isToolPage = true; } if(!isset($_SESSION['auth_user') && !$isToolPage) { UserLeSSO::getM_TK(base64_encode($_SERVER['REQUEST_URI')); } } |
其中参数 $_SERVER['REQUEST_URI'] 用于认证通过后重定向至登录前的链接。具体流程为记录用户登录前打开的request_uri, 作为url参数加到sso的next URL里,然后login.php就可以获取到这个uri,认证成功后直接重定向至该request_uri。
getM_TK()函数修改为:
1 2 3 4 5 6 7 8 9 | static public function getM_TK($uri="") { $sAppRootUrl = trim(MetaModel::GetConfig()->Get('app_root_url')); $loginPage = "env-production/authent-sso/login.php"; $sLoginURL = trim(MetaModel::GetModuleSetting('authent-sso', 'login_url', '')); $next = $sAppRootUrl . $loginPage . "?uri=" . $uri; header("Location: ". $sLoginURL . "?next=" . $next); } |
接下来在login中处理
1 2 3 4 5 6 7 8 9 | $appRootUrl = UserLeSSO::getAppRootUrl(false); .... .... if(UserRights::CheckCredentials(SSOUSER,'') === true) { $location = $appRootUrl . base64_decode($_GET['uri'); header("Location: $location"); } |
为了取到不带URI的app_root_url,getAppRootUrl()函数修改为:
1 2 3 4 5 6 7 8 9 10 11 12 | static public function getAppRootUrl($with_uri=true) { if($with_uri) { return trim(MetaModel::GetConfig()->Get('app_root_url')) . "pages/UI.php"; } else { $root_url = trim(MetaModel::GetConfig()->Get('app_root_url')); return preg_replace("/\/$/","",$root_url); } } |