SSO单点登陆,如何搭建sso服务器?范例运行及初步解读
发布于 作者:苏南大叔 来源:程序如此灵动~本篇文章开始,苏南大叔分几个维度,来解读一下一个github
上的sso
单点登陆的例子。多域名网站里面,有很多单点登陆sso
的需求。通俗上来说,就是多个网站同步登陆和同步退出。比如,在A网站上,sunan大叔登陆了。在打开B网站的时候,B网站显示,也同步登陆了。大概就是上面这个应用场景。
本文中涉及的代码为:mac
/legalthings/sso@0.3.0
。并不是说win
用户不能使用,只是就不能按照官方给出的方案运行了。理解它的实质之后,你就明白该如何在win
系统下运行了。当然,centos
系统下也一样。
sso
和oauth
sso
和oauth
的概念,可能会有些混淆,苏南大叔在这里,稍稍解释一下:
sso
一般用于同一个运营主体的网站,而oauth
系列的网站运营主体,往往不是同一个主体。具体的来说的话,两者有什么区别呢?举个例子来说,对于网站A/B/C,用户u。那么,对于sso
和oauth
方案来说:
sso
用户在网站A登陆之后,打开网站B的时候,用户是自动登陆的。打开网站C的时候,可以发现:登陆的也是用户u。在网站C退出登陆后,刷新网站A和B,也是待登陆状态。网站ABC之间是平等关系,没有主次。用户u的基本信息是存储在一个SSO
服务器上面的。
oauth
对于网站ABC来说,存在主次关系。用户信息u是存储在某个网站C上面的,网站A和网站B之间没有任何关系,其登陆行为,都是到网站C上面完成的。网站A上面登陆了,网站B和C不会是登陆状态。网站A退出登陆了,网站B和C也不会因此而退出登陆。
下载代码
大家可以从下面这个连接下载到legalthings/sso
相关源码:
这个sso
源码的运行,按照官方说明的方案来运行的话,是比较难以运行的,因为很多地方都是不走寻常路的。所以理解其精神实质最重要。
下面的链接是一些前置阅读文章,如果下面这些描述,您都弄清楚的话,那么接下来的学习会比较轻松。
- 《301/302/303/307跳转区别对比最佳实践》
https://newsn.net/say/redirect-3xx.html
- 《不使用 apche/nginx,php 命令如何启动 www 服务?》
https://newsn.net/say/php-www.html
- 《如何使用 php 函数 putenv 和 getenv ?env 函数范例大全》
https://newsn.net/say/php-putenv-getenv.html
执行步骤
下面的步骤仅仅是对官方sso
范例的复述,其运行方法真的是不走寻常路。本文测试环境是mac
/php72
。理论上来说,centos
等系统也是可以正常运行的,但是win
用户不行。本文中所描述的sso
范例的运行,并不需要nginx
,也不需要mysql
。
再次强调:本文范例是不走寻常路,学习其理念即可。实际的线上环境中,肯定不会这么做的。请注意学习理念即可。
整个demo
的运行,需要先安装依赖,然后分别启动三个网站,最后查看效果。
composer install
这个sso
项目,需要通过composer
来安装vendor
目录。composer
安装一次就行。执行的命令是:
sudo composer install
如果您还不明白什么是composer
,或者不知道如何安装composer
的话。可以点击下面的链接查看:
一个sso server
端口号是9000
,其启动命令为:
php -S localhost:9000 -t examples/server/
三个sso broker
三个broker
就是三个不同的网站,在本例中,分别是用端口号来进行区分的,其端口号分别是9001
/9002
/9003
。其启动命令分别为:
export SSO_SERVER=http://localhost:9000 SSO_BROKER_ID=Alice SSO_BROKER_SECRET=8iwzik1bwd; php -S localhost:9001 -t examples/broker/
export SSO_SERVER=http://localhost:9000 SSO_BROKER_ID=Greg SSO_BROKER_SECRET=7pypoox2pc; php -S localhost:9002 -t examples/broker/
export SSO_SERVER=http://localhost:9000 SSO_BROKER_ID=Julias SSO_BROKER_SECRET=ceda63kmhp; php -S localhost:9003 -t examples/ajax-broker/
最终效果(访客登陆)
三个broker
,就是三个可访问的网站。
注意:必须使用localhost
访问,使用127.0.0.1
是没用效果的。
http://localhost:9001
http://localhost:9002
http://localhost:9003
分别在浏览器里面进行访问,可用的用户名密码分别是:
用户名 | 密码 |
---|---|
jackie | jackie123 |
john | john123 |
在任何一个broker
里面登陆后,三个网站就都是登陆状态。在任意一个broker
网站退出登陆后,三个网站就都是退出登陆状态。整个sso demo
就演示完毕了。
可能存在的问题
端口更改
正常来说,php-fpm
的端口号是9000
。而sso server
是启动的新进程,可能会产生端口冲突。如果有下面的类似提示,您可以把上述几条代码中的9000
端口换成其他的不常用端口即可,比如:9100
。
Failed to listen on localhost:9000 (reason: Address already in use)
9000
端口是四条命令里面,都存在的。请注意替换所有的9000
端口字样。
ajax-broker
代码修改
在上述三个broker
中,可能第三个broker
,也就是9003
端口号的这个,可能会出现点问题。因为其代码里面使用的jquery.js
文件,实际调用的是google
的cdn
库。
https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js
在国内环境里面是不能被访问到的,所以您可能需要修改为国内的可用地址。这个如何修改,大家都有自己不同的选择,下面的是苏南大叔使用的一个jquery
的cdn
选择。
http://code.jquery.com/jquery-3.3.1.min.js
总结
本文中,苏南大叔描述了github
上的legalthings/sso
的运行方式。官方推荐的运行方式是不走寻常路的,所以,对于新人来说,在运行和理解上确实存在着一定的困难。在后续的文章中,苏南大叔将对本文的内容进行分解描述。如果大家明白了这其中的原理,那么也就会明白如何修改本文legalthings/sso
官方范例里面的瑕疵了。
更多sso
相关文字中,苏南大叔推荐你点击下面的链接:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。