SSO单点登陆,典型应用场景逻辑走向分析
发布于 作者:苏南大叔 来源:程序如此灵动~本文中,苏南大叔从宏观角度上分析一下legalthings/sso
的逻辑走向,并不会涉及太具体的代码,仅仅从逻辑原理层面上进行代码分析。在后续的代码中,会对具体的业务代码实现细节进行详细分析。
本文的范例来自legalthings/sso
。截至到发稿,最新版本为0.3.0 - Bearer auth
。
基本概念
本文共涉及以下几个基本概念:
- 角色:用户浏览器,网站
broker
,鉴权服务器sso server
- 鉴权:用户
cookie
、网站和用户之间的token
(也就是上述cookie
)、网站和鉴权服务器之间的checksum
。
访问第一个broker
用户浏览器
用户通过浏览器访问网站broker
,broker
初始化sso server
相关设置。用户第一次访问,不存在cookie
,所以broker
将用户浏览器使用307
状态码导向到sso server
,进行attach
操作。
attach
操作中,broker
随机生成了token
,当然也就是用户的cookie
,然后将用户浏览器导向到了sso server
的特定attach
链接中,这个链接url
使用了broker
和sso server
之间的鉴权checksum
(token
+secret
构成的某加密算法)。
sso server
sso server
在attach
操作中,先检测checksum
是否有效,然后建立用户和sso server
之间的session
信息。并返回给用户SESSIONID
的cookie
信息,attach
操作结束。
浏览器重新发起请求
由于attach
操作后,页面再次重复此前的操作,所以表面上来看,前几步操作是重新走一次的。但是,由于本次操作中,和原有操作对比的话,已经存在了两个新的cookie
。一个来自broker
的sso_token_{broker}
,另外一个来自sso server
的SESSIONID
.
所以,并不会真正的执行attach
操作。接下来的操作是服务器端到sso server
上获取用户信息,正常情况下,由于是第一次操作,是不会获得到相关信息的,跳转到broker
的登陆页面。
broker
登陆页
broker
登陆页面,重新执行attch
操作,简单检测完cookie
后就完成attach
操作。用户第一次操作,无法检测到用户信息,也无法获得用户提交的数据,所以,显示用户登陆表单。
用户填写用户名密码,再次post
到登陆页面。经过简单的cookie
对比,略过attach
操作。进入到用户名密码验证环节。
broker
验证用户名密码
broker
拿到表单post
过来的用户名和密码后,需要和sso server
进行通信,执行login
操作。这个时候,拿到了用户信息,跳转回首页,显示用户信息。此过程中,没有用户和sso server
的直接操作,都是broker
从中间代劳。
访问第二个broker
流程上和上述基本一致,但是执行attach
操作的时候,307
到sso server
的浏览器,是带着SESSIONID这个cookie
的。所以,两个broker
在当前用户token
上面达成了一致。所以在用户登陆操作检测过程中,自动登陆成功。
退出登陆
也是通过当前broker
和sso server
进行通信,执行logout
操作,这个也是服务器端操作。用户和sso server
之间,并没有直接产生联系。sso server
直接注销所有的cookie
。
总结
本文从逻辑走向角度,描述了sso
应用的典型场景。侧重于形式,而没有触及本质。当然,由于所用范例的局限性,截图中的cookie
发送部分,其实和最终的效果,还是有所差距的。不过,大体的逻辑流程是说明白了。对于细节cookie
方面,在后面的文章中,苏南大叔还会做更详细的说明。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。