点击上方 "程序员小乐"关注公众号, 星标或置顶一起成长
每天早上8点20分, 第一时间与你相约
每日英文
Sometimes, tears is sign of unspoken happiness. And smile is sign of silent pain.
有时候,眼泪,是一种无法言说的幸福;微笑,是一种没有说出口的伤痛。
每日掏心话
原来世界上真的没有什么是永远。一段友情,离开了就淡了。一段爱情,分离了就散了。珍惜现在所拥有的,也许下一秒,就不再属于你的,以前,我错了, 只在乎我在乎的人。现在,我懂了,从今以后我只在乎在乎我的人。
来自:一叶知秋 | 责编:乐乐
链接:muyinchen.github.io/2016/12/19/单点登录的实现原理/
程序员小乐(ID:study_tech)第 654 次推文 图片来自网络
往日回顾:程序员因接外包坐牢 456 天!两万字长文揭露心酸真实经历
正文
由上图可以看到,这套单点登录依赖于OpenId的传递,其验证的基础在于OpenId的存储以及发送。
1、当用户第一次登录时,将用户名密码发送给验证服务;
2、验证服务将用户标识OpenId返回到客户端;
3、客户端进行存储;
4、访问子系统时,将OpenId发送到子系统;
5、子系统将OpenId转发到验证服务;
6、验证服务将用户认证信息返回给子系统;
7、子系统构建用户验证信息后将授权后的内容返回给客户端。
这套单点登录验证机制的主要问题在于他基于C/S架构下将用户的OpenId存储于客户端,在子系统之间发送OpenId,而B/S模式下要做到这一点就显得较为困难。为了处理这个问题我们将引出下一种方式,这种方式将解决B/S模式下的OpenId的存储、传递问题。
我们知道,Cookie的作用在于充当一个信息载体在Server端和Browser端进行信息传递,而Cookie一般是以域名为分割的,例如a.xxx.com与b.xxx.com的Cookie是不能互相访问的,但是子域名是可以访问上级域名的Cookie的。即a.xxx.com和b.xxx.com是可以访问xxx.com下的Cookie的,于是就能将顶级域名的Cookie作为OpenId的载体。
1、 在提供验证服务的站点里登录;
2、 将OpenId写入顶级域名Cookie里;
3、 访问子系统(Cookie里带有OpenId)
4、 子系统取出OpenId通过并向验证服务发送OpenId
5、 返回用户认证信息
6、 返回授权后的内容
欢迎在留言区留下你的观点,一起讨论提高。如果今天的文章让你有新的启发,学习能力的提升上有新的认识,欢迎转发分享给更多人。
欢迎各位读者加入程序员小乐技术群,在公众号后台回复“加群”或者“学习”即可。
猜你还想看
阿里、腾讯、百度、华为、京东最新面试题汇集
Java Web 开发必须掌握的三个技术:Token、Cookie、Session!
注意,系统架构的 3 个误区,看这篇就对了!
Java内存管理,看这篇就对了!
文章有问题?点此查看未经处理的缓存