大一统的中央集权-SSO

作者: 吃火龙果吐芝麻 | 来源:发表于2018-12-18 13:20 被阅读8次

         “号外号外,惊天大消息,人类要开始做SSO系统啦”。一大清早就听见PHP在哪里吆喝道。

        “大清早还让不让人睡觉了”,C恶狠狠的说。“虽说你是世界上最好的语言,但是也别到处卖弄啊,SSO是个什么鬼,说人话”

       PHP:大傻帽,SSO都不知道啊。Single Sign One 啊。单点登录啊。

        C:哈哈哈哈哈哈哈哈哈。让我笑一会儿。不是就个登录么?至于说的这么高大上啊。你去看看用我写的订单系统去,每天有多少人登录。他们想访问我的系统时,必须输入用户名和密码,然后我进行验证,验证通过后我就在我这边建立一个叫做session的东西,然后把sessionId通过cookie发送给浏览器,下次他们在登录的时候会带着cookie一起发过来,我从cookie中拿到sessionId就知道他们已经登录啦。通过cookie和session就可以把无状态通信的转换成有状态的啦,是不是so easy啊。C说完满脸自豪的样子。

        PHP:你说的登录没问题啊,可是人们并不是每天只支付你的订单系统哦。他们可能还需要登录用户系统,可能还需要登录库存系统呢。比如说有个叫小明的用户登录了你的订单系统,然后想去看库存系统,发现又让登录,再次输入用户名密码,然后又去登录用户系统,又输一次用户名密码,去访问财务系统,有来一遍。。。。。如果有一万个服务需要访问,那估计别干别的啦。

        C:这个这个这个。。。

        PHP:是吧,本来就是同一个用户,不论是访问订单系统也好,库存系统也罢,都是我们自己内部的系统,所以在一个地方登陆了就能自动登陆别的系统不就好了么。这就是人类要开始搞SSO得原因喽。

        C:哇,果然是高大上的样子。可是要怎么实现呢?感觉超级难得样子呢。

        PHP:你刚刚不是还洋洋得意的把登录的原理说了一遍么,自己好好想想呢。

        C:嗯。对。登录就是通过cookie和session来实现有状态的。我可以把cookie做共享啊。登录完订单系统之后我就有了cookie,去登录库存系统的时候我把cookie带过去不就行了么?

        PHP:NO! NO!NO! 你这样是有问题得。1,cookie是不能跨域的,比如说a.com产生的cookie是不能传递给b.com的。2,就算cookie可以带过来了,可是库存系统并没有session啊,如何验证呢?

        C:这个简单啊。1,我们可以让所有的系统都挂在同一个一级域名下啊。比如我叫a.corp.com,库存系统叫b.corp.com,财务系统叫c.corp.com,这样cookie不就能共享了嘛。2,既然cookie能共享,那session当然也能共享。之前把session存在自己的内存里,别人拿不到,我从内存里拿出来放在一个大家都能拿到的地方不就行了么?就像下面这样。哈哈哈我是不是很聪明。

        这个时候一旁的Java终于按奈不住了:你的系统中可能有很多个系统,而且各自实现的语言可能也不尽相同,有用C++的,有用PHP的,有用GO的,也有用Java的,共享session就会显得很麻烦啦。各个系统还得自己维护用户。其实啦,人们做SSO的初衷就是想消除多账号的问题,不用各自系统维护用户的信息。他们将会建立一个统一的认证中心,所用的用户的认证工作都交给这个认证中心来完成就OK啦。

        PHP和C:哇。好高大上哦,大佬,给我们讲讲呗。

        JAVA:看你们这么好学,听我娓娓道来。

        比如说现在用户第一次像订单系统发起了访问:www.a.corp.com,这个时候订单系统发现用户没有登录的话,那他需要做的一项操作就是重定向认证中心:www.sso.com/login?redirect=www.a.corp.com。其中www.sso.com/login就是认证中心的登录地址,redirect=www.a.corp.com就是登录完成后需要跳转到的地址。在认证中心登录之后认证中心会做以下几件事情:

1,建立一个session

2,发放ticket

3,重定向到你的地址,并在浏览器种下cookie信息。注意这个cookie是sso服务器的cookie哦。如:ssoid=1,domain=sso.com

大致流程如下:

需要注意的有两点:

1,进行了两次重定向哦。第一次是重定向到SSO的服务器,第二次是重定向我们的后端服务器。

2,流程完成后再浏览器种了两个cookie,一个是sso服务器的cookie,一个是订单系统的cookie。

        PHP和C听毕,拍手称快:大哥真不愧是世界上最好的语言呢。C接着问,那接着库存系统会发生什么呢?

        Java:这个简单啊。还记得上面在浏览器的cookie吗?看下面的流程。

你俩想想,这个流程之后浏览器会有几个cookie呢?

        PHP和C争先恐后的喊道:我知道我知道。应该是有三个的。一个是认证中心SSO的cookie: domain sso.com,一个是订单系统的cookie:a.corp.com,还有一个是库存系统的cookie:domain b.corp.com。实质上就是保存了一个认证中心的cookie和多个子系统的cookie而已啦

        Java:孺子可教也。一般我们称SSO的cookie的对应的会话成为全局会话,各自子系统cookie对应的会话称为局部会话。

        PHP和C:听起来是高大上,不会感觉好绕啊。又是各种重定向,又是各种cookie的,我们都懵逼了,实现起来岂不是更加的困难了。

        Java:你们真是out啊,听说过CAS(Central Authentication Service)吗?耶鲁大学提出的一套关于SSO的解决方案,现在都已经广泛的推广啦。大家都在用啦。

        PHP和C听毕,感叹道:学无止境啊。比我优秀的人都还在不断进步,我们还有不学习的道理啊。

相关文章

  • 大一统的中央集权-SSO

    “号外号外,惊天大消息,人类要开始做SSO系统啦”。一大清早就听见PHP在哪里吆喝道。 “大清早还让不让人...

  • 我国历史上大一统的国家治理的特点

    我国历史上大一统的国家治理表现出四个重要特点: 一是国家统一。国家统一是大一统中央集权国家治理体系...

  • 一生参与平叛多达十三次,位极人臣,年近八旬竟遭横死?!

    自秦代以来,我国开始了中央集权的大一统格局。虽然漫漫2000多年来,庞大的中华帝国,始终是屹立东方的天朝大国,但有...

  • 中国社会关系的变迁——豪族社会

    秦建立了中央集权的大一统王朝,但是,新的社会关系形成之初,各个角色都不太适应。 统治者(秦二世)用旧式的方法(暴力...

  • 汉武帝刘彻

    武帝 “文景”后期,社会财富积累的结果是两极分化,东汉末的地方豪强社会形态已开始显现。大一统中央集权体制,居于内廷...

  • 单点登录介绍

    标签:sso iplas 一、SSO(单点登录)介绍 SSO英文全称Single SignOn,单点登录。SSO是...

  • 2020-11-30

    中国从秦朝开始建立起中央集权制的大一统国家,到清朝灭亡结束王朝统治。虽然经济模式历经进化更迭,但是其生命周期基本都...

  • 秦朝的暴政和快速消亡的原因

    秦朝,一个对中国历史有着极大影响的王朝,在战国时期统一六国,实现了疆域大一统的中央集权国家,为何沦落到只有1...

  • 《中央帝国的财政密码》P27-44

    大帝国在创建大一统的中央集权国家时失败,是因为帝国经历了用武力征服之后,没有用文官进行政治征服,没有建立统一的制度...

  • 先秦0905|| 三代

    三代指的是夏商周。说“代”而不说“朝”,是因为“朝”是对中央集权国家的专称。通常指秦统一六国后建立的中央大一统国家...

网友评论

    本文标题:大一统的中央集权-SSO

    本文链接:https://www.haomeiwen.com/subject/slakkqtx.html