it123社区:学习PHP、Java编程平台

 找回密码
 立即注册

扫一扫,访问微社区

搜索
热搜: php thinkphp 技术
查看: 579|回复: 2

基于PHP的sso单点登录实例

[复制链接]

71

主题

129

帖子

843

积分

信息监察员

Rank: 9Rank: 9Rank: 9

积分
843
发表于 2017-7-2 22:41:28 | 显示全部楼层 |阅读模式


基本思路:

单点登录,需要一个授权中心,即上图中的auth.com。然后每个站点,还应该有自己的登录操作和登出操作。

我们一般登录操作可以分为以下2步:
1. 验证用户名和密码
2. 创建相关session
其实,sso单点登录就是把所有站点的第一步放在了授权中心里面,第二步还都是由每个站点完成。

比如,我们在站点A的某个页面点击登录,则跳转到授权中心(当前页面url作为get参数)。授权中心验证通过之后(第一步执行完成),调用所有站点的登录操作(使所有站点执行第二步)。在授权中心调用所有站点的登录操作,可以采用1. JavaScript标签的src引入;2. iframe框架引用;3. jsonp方式远程调用。在所有站点的登入操作完成以后,通过get参数中的url,跳转回站点A的该页面。此时,所有的站点就都登录完成了。登出操作的思路是类似的,只不过少了用户名和密码的验证而已。

bbs.com:
登入: bbs.com/index.PHP/login/login
登出: bbs.com/index.php/login/logout

space.com
登入: space.com/index.php/login/login
登出: space.com/index.php/login/logout

授权中心auth.com
首先,需要一个form,用来显示登录页面
auth.com/index.php/index/form
然后,需要验证用户名和密码,并对所有的站点,进行登入操作。
auth.com/index.php/index/login
最后,需要对所有的站点执行登出操作。
auth.com/index.php/index/logout

对所有站点执行登入操作(为站点种session)的核心代码:

<{foreach $loginList as $site}> <script type="text/javascript" src="<{$site}>?token=<{$token}>"></script> <{/foreach}>

即,通过外部引入文件的方式,执行所有站点的登入操作(也可用jsonp的方式),我们可以看到传递了一个token参数,这个token参数是和用户id唯一对应的。每当用户在授权中心登录成功时,我们就对该用户生成一个token,并存入数据表。然后各个站点就可以通过token的值获取到相关用户信息。
(因为每次用户登录成功,都会更新token,所以采用这种方式相对安全一些)

对所有站点执行登出操作(销毁所有站点的session)的核心代码:

<{foreach $logoutList as $site}> <script type="text/javascript" src="<{$site}>"></script> <{/foreach}>

好了,说明就写到这里吧。下面放上代码下载地址和部署说明。

代码下载

http://download.csdn.net/detail/koastal/9534662

部署说明

配置相关虚拟主机

############auth.com配置
<VirtualHost 127.0.0.1:80>
DocumentRoot "D:\sso\auth" ServerName auth.com
<Directory "D:\sso\auth"> Options FollowSymLinks AllowOverride None Order deny,allow Require all granted </Directory>
</VirtualHost>

############space.com配置

<VirtualHost 127.0.0.1:80> DocumentRoot "D:\sso\space" ServerName space.com
<Directory "D:\sso\space"> Options FollowSymLinks AllowOverride None Order deny,allow Require all granted </Directory>
</VirtualHost>

#############bbs.com配置


<VirtualHost 127.0.0.1:80> DocumentRoot "D:\sso\bbs" ServerName bbs.com
<Directory "D:\sso\bbs">
Options FollowSymLinks AllowOverride None Order deny,allow Require all granted
</Directory>
</VirtualHost>


修改host,劫持域名

127.0.0.1 auth.com 127.0.0.1 space.com 127.0.0.1 bbs.com

数据库设置

本地使用的wamp环境,MySQL用户名root,密码为空,数据库test,表名admin。
数据库配置可以在Model.php里面修改。

admin表结构

id        name        password        token

帖子的最近访客

爱技术、爱分享、爱生活、爱IT123!
回复

使用道具 举报

3

主题

21

帖子

79

积分

新手上路

Rank: 1

积分
79
发表于 2017-7-5 10:24:52 | 显示全部楼层
楼主,,,链接地址404?
该会员没有填写今日想说内容.
回复

使用道具 举报

50

主题

142

帖子

613

积分

审核员

Rank: 7Rank: 7Rank: 7

积分
613

公益小组

QQ
发表于 2017-7-5 11:50:27 | 显示全部楼层
学习了...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

技术交流群

IT123微社区

微信打赏本站

QQ|Archiver|手机版|小黑屋|it123社区:学习PHP、Java编程平台  

GMT+8, 2018-4-23 19:19

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表