• sso单点登录



    一、 $broker->attach(true);将我们的会话附加到SSO服务器上的用户会话(将用户会话附加到代理会话),
    如果没有cookie,就生成,并且生成对应缓存。如果有就return(它就认为也有对应的缓存)

    //第一次打开浏览器,(无token)创建token ,Sso端会重定向到客户端原来网站(相当于再次刷新了页面)

    //第二次刷新页面, (有cookie->token) 直接return
    注:token 就是证明有没有过通信

    1.进行验证(感觉没啥意义)
    客户端 Broker.php 'checksum' => hash('sha256', 'attach' . $this->token . $this->secret) 和
    服务端 Server.php $checksum = $this->generateAttachChecksum($_REQUEST['broker'], $_REQUEST['token']);
    return hash('sha256', 'attach' . $token . $broker['secret']);

    2.生成回话令牌
    return "SSO-{$brokerId}-{$token}-" . hash('sha256', 'session' . $token . $broker['secret']);

    3.生成缓存
    $this->cache->set($sid, $this->getSessionData('id'));//当前回话id


    二、 $user = $broker->getUserInfo();//获取用户信息

    1. 客户端 Broker.php $params['sso_session'] =
    $checksum = hash('sha256', 'session' . $this->token . $this->secret);
    return "SSO-{$this->broker}-{$this->token}-$checksum";
    2. 服务端 Server.php

    startBrokerSession() //启动代理请求到SSO服务器的会话 (没有缓存就报403)
    $sid = $_GET['sso_session']; $linkedId = $this->cache->get($sid); //从缓存读取回话
    $this->brokerId = $this->validateBrokerSessionId($sid);


    总结:
    第一次登陆报错问题:
    因为之前肯定在浏览器登陆过,有cookie,(设置保存一小时)

    原理,cookie -> 缓存会话id :$this->cache->set($sid, $this->getSessionData('id'));
    -> 两个域名访问 存储的缓存会话id 相同,开启这个session-> 去同一个session文件中找sso_user
    session 判断是否登录

  • 相关阅读:
    453. Minimum Moves to Equal Array Elements
    CDH的安装
    Java注解
    BeanUtils--内省加强
    Java内省
    ant工具
    log4j的配置及使用
    武汉科技大学ACM:1010: 零起点学算法89——母牛的故事
    武汉科技大学ACM:1009: 华科版C语言程序设计教程(第二版)例题5.4
    武汉科技大学ACM:1007: 不高兴的津津
  • 原文地址:https://www.cnblogs.com/wangyuyanhello/p/13225343.html
Copyright © 2020-2023  润新知