本文以legalthings/sso的增益改善版本为基础,分析的手段则是基于f12抓包以及nginx的日志文件。主要分析点是身份鉴权过程。本文的前置阅读文章是:

苏南大叔:SSO单点登录,attach操作代码逻辑实现及鉴权操作 - sso-code-hero
SSO单点登录,attach操作代码逻辑实现及鉴权操作(图3-1)

本文测试环境:mac/legalthings/sso@0.3.0 - Bearer auth

broker处理attach

下面的是几点整体总结:

  • 用户浏览器实质上参与了attach操作,但是对于用户来说,却是无感的。
  • attach操作是由broker导向的,对于同一用户来说,仅仅attach一次。是否需要用户浏览器参与attach操作,判断标准就是一个名为sso_token_{broker}cookie
  • 用户浏览器参与attach操作之后,会和broker之间有个cookie,名为:sso_token_{broker}。对于浏览器来说,叫做cookie,而对于broker来说,就叫做token。两个名字实际上是同一个事物。
  • 用户浏览器和sso server之间也有个cookie,名为PHPSESSID。但是对于当前broker来说,可能用到的概率就不大了。但是对于第二个broker来说,新的attach操作,就是靠这个cookie,来把本次的broker和上一次的broker进行关联的。

下面描述实现代码细节:
src/Broker.php:

public function __construct($url, $broker, $secret, $cookie_lifetime = 3600){
    //...
    if (isset($_COOKIE[$this->getCookieName()])) $this->token = $_COOKIE[$this->getCookieName()];
}
protected function getCookieName(){
    return 'sso_token_' . preg_replace('/[_\W]+/', '_', strtolower($this->broker));
}
public function generateToken(){
    if (isset($this->token)) return;
    $this->token = base_convert(md5(uniqid(rand(), true)), 16, 36);
    setcookie($this->getCookieName(), $this->token, time() + $this->cookie_lifetime, '/');
}
public function isAttached(){
    return isset($this->token);
}
public function attach($returnUrl = null){
    if ($this->isAttached()) return;
    //...
}

苏南大叔:SSO单点登录,attach操作代码逻辑实现及鉴权操作 - serverside-setcookie
SSO单点登录,attach操作代码逻辑实现及鉴权操作(图3-2)

第二个brokerattach

浏览器登陆第二个broker的时候,上面的流程是再次走一次的。但是,再attach的时候,attachurl中包含的信息是broker2中的sso_token_{broker}secret。但是对于sso server来说,cookie却还是第一次brokerPHPSESSID。那么就是通过这种方式,将两个broker的用户登陆联系起来的。

关于如何进行关联这部分内容,待下文分解。

总结

本文从代码算法层面,对sso serverattach操作进行了分析。更多sso的代码分析,且听苏南大叔的下回分解。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留链接作者。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
未经许可,规模化镜像抄袭本站内容的行为,将会根据有关法律法规进行维权。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

 【加群】加入QQ群【175454274】和大家一起讨论这个问题

 【源码】本文代码片段及相关软件,请点此获取

 【绝密】秘籍文章入口,仅传授于有缘之人   sso

本站的忠实读者小伙伴,正在阅读下面这些文章: