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/

  • 相关阅读:
    Es学习第六课, ES基本搜索_search
    Es学习第一课,了解基本功能和概念
    Es学习第二课, ES安装和客户端使用
    Es学习第四课, 倒排索引
    nginx的location配置详解
    Es学习第三课, ElasticSearch基本的增删改查
    Es学习第五课, 分词器介绍和中文分词器配置
    关于Spring的一点理解
    好久没来,回来了。
    对于ie不支持select的option的onclick事件的处理
  • 原文地址:https://www.cnblogs.com/davidwang456/p/4506404.html
Copyright © 2011-2022 走看看