zoukankan      html  css  js  c++  java
  • discuz(dz) SSO(单点,同歩,异步)登录 --转

    原文地址:http://fc-lamp.blog.163.com/blog/static/1745666872012762520123/

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

     一般流程:

      1 发起请求:

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

      2)在member_logging.php里实例化登录控制类(new logging_ctl 20行),并调用其 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 = new usercontrol();

      $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.com   http://ssob.fc_lamp.com 

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

      2 过程

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

         ssoa_index.php:

     

    <?php

    echo <<<HTML

    <html>

    <head>

    <title>This is SSOA Page</title>

    </head>

    <p>

    This is SSOA Page

    </p>

    </html>

    HTML;

     

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

    {

    //请求应用

    echo <<<HTML

    <p>Loing Success!!</p>

    <script type="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="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"' );

    setcookie ( 'myauth', 'test_success', time()+3600, '/' );

    exit ( 1 );

    }

    echo <<<HTML

    <html>

    <head>

    <title>This is SSOB Page</title>

    </head>

    <p>

    This is SSOB Page

    </p>

    </html>

    HTML;

    //查看结果

    if (isset ( $_COOKIE ['myauth'] ))

    {

    var_dump ( $_COOKIE ['myauth'] );

    }

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

       

    discuz(dz) SSO(单点,同歩,异步)登录 - fc-lamp - fc-lamp的博客

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

    discuz(dz) SSO(单点,同歩,异步)登录 - fc-lamp - fc-lamp的博客

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

  • 相关阅读:
    标签的讲解
    属性分类
    LeetCode 003. 无重复字符的最长子串 双指针
    Leetcode 136. 只出现一次的数字 异或性质
    Leetcode 231. 2的幂 数学
    LeetCode 21. 合并两个有序链表
    象棋博弈资源
    acwing 343. 排序 topsort floyd 传播闭包
    Leetcode 945 使数组唯一的最小增量 贪心
    Leetcode 785 判断二分图 BFS 二分染色
  • 原文地址:https://www.cnblogs.com/davidwang456/p/4506404.html
Copyright © 2011-2022 走看看