[转]iTop集成SSO登录
https删除://www.删除 删除/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', 'http://localhost'));
$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);
}
}
页:
[1]