我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

本篇文章开始,苏南大叔分几个维度,来解读一下一个github上的sso单点登陆的例子。多域名网站里面,有很多单点登陆sso的需求。通俗上来说,就是多个网站同步登陆和同步退出。比如,在A网站上,sunan大叔登陆了。在打开B网站的时候,B网站显示,也同步登陆了。大概就是上面这个应用场景。

苏南大叔:SSO单点登陆,如何搭建sso服务器?范例运行及初步解读 - sso-server
SSO单点登陆,如何搭建sso服务器?范例运行及初步解读(图11-1)

本文中涉及的代码为:mac/legalthings/sso@0.3.0。并不是说win用户不能使用,只是就不能按照官方给出的方案运行了。理解它的实质之后,你就明白该如何在win系统下运行了。当然,centos系统下也一样。

ssooauth

ssooauth的概念,可能会有些混淆,苏南大叔在这里,稍稍解释一下:

sso一般用于同一个运营主体的网站,而oauth系列的网站运营主体,往往不是同一个主体。具体的来说的话,两者有什么区别呢?举个例子来说,对于网站A/B/C,用户u。那么,对于ssooauth方案来说:

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单点登陆,如何搭建sso服务器?范例运行及初步解读 - sso-github
SSO单点登陆,如何搭建sso服务器?范例运行及初步解读(图11-2)

这个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

再次强调:本文范例是不走寻常路,学习其理念即可。实际的线上环境中,肯定不会这么做的。请注意学习理念即可。

苏南大叔:SSO单点登陆,如何搭建sso服务器?范例运行及初步解读 - sso-command-win
SSO单点登陆,如何搭建sso服务器?范例运行及初步解读(图11-3)

整个demo的运行,需要先安装依赖,然后分别启动三个网站,最后查看效果。

composer install

这个sso项目,需要通过composer来安装vendor目录。composer安装一次就行。执行的命令是:

sudo composer install

苏南大叔:SSO单点登陆,如何搭建sso服务器?范例运行及初步解读 - sso-composer-install
SSO单点登陆,如何搭建sso服务器?范例运行及初步解读(图11-4)

如果您还不明白什么是composer,或者不知道如何安装composer的话。可以点击下面的链接查看:

一个sso server

端口号是9000,其启动命令为:

php -S localhost:9000 -t examples/server/

苏南大叔:SSO单点登陆,如何搭建sso服务器?范例运行及初步解读 - sso-server
SSO单点登陆,如何搭建sso服务器?范例运行及初步解读(图11-5)

三个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/

苏南大叔:SSO单点登陆,如何搭建sso服务器?范例运行及初步解读 - sso-broker-01
SSO单点登陆,如何搭建sso服务器?范例运行及初步解读(图11-6)

export SSO_SERVER=http://localhost:9000 SSO_BROKER_ID=Greg SSO_BROKER_SECRET=7pypoox2pc; php -S localhost:9002 -t examples/broker/

苏南大叔:SSO单点登陆,如何搭建sso服务器?范例运行及初步解读 - sso-broker-02
SSO单点登陆,如何搭建sso服务器?范例运行及初步解读(图11-7)

export SSO_SERVER=http://localhost:9000 SSO_BROKER_ID=Julias SSO_BROKER_SECRET=ceda63kmhp; php -S localhost:9003 -t examples/ajax-broker/

苏南大叔:SSO单点登陆,如何搭建sso服务器?范例运行及初步解读 - sso-broker-03
SSO单点登陆,如何搭建sso服务器?范例运行及初步解读(图11-8)

最终效果(访客登陆)

三个broker,就是三个可访问的网站。

注意:必须使用localhost访问,使用127.0.0.1是没用效果的。
http://localhost:9001
http://localhost:9002
http://localhost:9003

分别在浏览器里面进行访问,可用的用户名密码分别是:

用户名密码
jackiejackie123
johnjohn123

在任何一个broker里面登陆后,三个网站就都是登陆状态。在任意一个broker网站退出登陆后,三个网站就都是退出登陆状态。整个sso demo就演示完毕了。

苏南大叔:SSO单点登陆,如何搭建sso服务器?范例运行及初步解读 - sso-demo-all
SSO单点登陆,如何搭建sso服务器?范例运行及初步解读(图11-9)

可能存在的问题

端口更改

正常来说,php-fpm的端口号是9000。而sso server是启动的新进程,可能会产生端口冲突。如果有下面的类似提示,您可以把上述几条代码中的9000端口换成其他的不常用端口即可,比如:9100

Failed to listen on localhost:9000 (reason: Address already in use)

苏南大叔:SSO单点登陆,如何搭建sso服务器?范例运行及初步解读 - 9000-port
SSO单点登陆,如何搭建sso服务器?范例运行及初步解读(图11-10)

9000端口是四条命令里面,都存在的。请注意替换所有的9000端口字样。

ajax-broker代码修改

在上述三个broker中,可能第三个broker,也就是9003端口号的这个,可能会出现点问题。因为其代码里面使用的jquery.js文件,实际调用的是googlecdn库。

https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js

在国内环境里面是不能被访问到的,所以您可能需要修改为国内的可用地址。这个如何修改,大家都有自己不同的选择,下面的是苏南大叔使用的一个jquerycdn选择。

http://code.jquery.com/jquery-3.3.1.min.js

苏南大叔:SSO单点登陆,如何搭建sso服务器?范例运行及初步解读 - sso-ajax-broker-jquery
SSO单点登陆,如何搭建sso服务器?范例运行及初步解读(图11-11)

总结

本文中,苏南大叔描述了github上的legalthings/sso的运行方式。官方推荐的运行方式是不走寻常路的,所以,对于新人来说,在运行和理解上确实存在着一定的困难。在后续的文章中,苏南大叔将对本文的内容进行分解描述。如果大家明白了这其中的原理,那么也就会明白如何修改本文legalthings/sso官方范例里面的瑕疵了。

更多sso相关文字中,苏南大叔推荐你点击下面的链接:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

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

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