discuz(dz) SSO(单点,同歩,异步)登录

《discuz(dz) SSO(单点,同歩,异步)登录》

discuz(dz)SSO(单点,同歩,异步)登录

一般流程:

1发起请求:

1)登录请求到localhost/member.php初始化一些设置,然后调用source/module/member/member_logging.php(37行)。

2)在member_logging.php里实例化登录控制类(newlogging_ctl20行),并调用其on_login()方法,logging_ctl类在class_member.php文件里。

3)进入source/class/class_member.php文件在logging_ctl类的on_login()方法里进行登录操作,具体为:在108行调用userlogin()方法完成本地登录。如一切正常($result[‘status’]>0)在149行调用setloginstatus()设置登录状态。

在走到153行,$ucsynlogin=$this->setting[‘allowsynlogin’]?uc_user_synlogin($_G[‘uid’]):”;这句表明如果设置的单点登录,那么就进行其应用的登录认证,即调用“uc_user_synlogin()”。

4)调用"uc_user_synlogin()"方法,进入到uc_client/client.php文件,在"uc_user_synlogin()"方法里又调用"uc_api_post()"方法(313行),最终是使用socket方式的向localhost/uc_server(即UC_API)/index.php发起请求。

5)在uc_server/index.php里获取到控制器名($m=getgpc(‘m’);)及控制器的方法($a=getgpc(‘a’);)

然后在实例化控制器并调用相关方法(62行),这里$m是user,$a是synlogin即为:

$control=newusercontrol();

$control->onsynlogin();

6)进入usercontrol()类所在文件:uc_client/control/user.php在33行即为应用例表单点登录的通知方法(onsynlogin)。

我们可以看到,这里只是循环输出了一段JS代码,加载JS源码的src=""’.$app[‘url’].’/api/uc.php……."属性即为应用的URL地址,而UC的用户同歩登录的API地址即为:localhost/api/uc.php,后面带两个参数一是时间戳time,二是code其值是由用户名,用户ID等组成的URL参数字符串被加密后的结果。

2响应请求:

进行一些认证处理后,在api/uc.php文件第196行synlogin()方法里设置登录成功认证标识,即:设置"auth"COOKIE。

二简单模拟

1说明:

假设我有两个子域:http://ssoa.fc_lamp.comhttp://ssob.fc_lamp.com

当我从ssoa登录时,ssob就同歩登录了。

2过程

由于这里我只是简单模拟,所以代码相当粗糙。

ssoa_index.php:

<?php

echo<<<HTML

<html>

<head>

<title>ThisisSSOAPage</title>

</head>

<p>

ThisisSSOAPage

</p>

</html>

HTML;

if(isset($_GET[‘a’])and$_GET[‘a’]==’login’)

{

//请求应用

echo<<<HTML

<p>LoingSuccess!!</p>

<scripttype="text/javascript"src="http://ssob.fc_lamp.com/index.php?a=login"></script>

HTML;

}

ssob_index.php:

<?php

if(isset($_GET[‘a’])and$_GET[‘a’]==’login’)

{

header(‘P3P:CP="CURaADMaDEVaPSAoPSDoOURBUSUNIPURINTDEMSTAPRECOMNAVOTCNOIDSPCOR"’);

setcookie(‘myauth’,’test_success’,time()+3600,’/’);

exit(1);

}

echo<<<HTML

<html>

<head>

<title>ThisisSSOBPage</title>

</head>

<p>

ThisisSSOBPage

</p>

</html>

HTML;

//查看结果

if(isset($_COOKIE[‘myauth’]))

{

var_dump($_COOKIE[‘myauth’]);

}

我们请求http://ssoa.fc_lamp.com/index.php?a=login

我们再来查看:http://ssob.fc_lamp.com/index.php

另:关于SESSION,COOKIE问题参看http://fc-lamp.blog.163.com/blog/static/17456668720111029280317/

游手好闲会使人心智生锈

discuz(dz) SSO(单点,同歩,异步)登录

相关文章:

你感兴趣的文章:

标签云: