PHP单点登入的问题
怪我咯
怪我咯 2017-04-11 10:15:31
[PHP讨论组]

我做了一个单点登录遇到一个问题是:比如有A、B、C三系统,当没有登入的时候会跳到S系统进行登入,登入成功会生成一个token,并把token传回来,同时会把token存到redis里面。但是B、C系统如何去获取那个token?

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(16)
PHP中文网

亲,你现在都存入redis了,B、C链接上redis然后直接从redis里面取不可以吗

大家讲道理

有N多理由反对采纳的答案。
首先发放票据和验证票据的过程不对(这个系统通常还要做双机热备等防单点失效,或者分布式之类的)
如其他人所说,100个系统难道说推送100个?超时什么的怎么搞?
如果有一个系统登出了,其他系统应该也要登出?
如果被修改了权限,只允许登录A,不允许登录B,怎么搞?

不存在跨域问题的。

  1. 进入a系统的时候,跳转去s系统。

  2. s系统验证账号后,让浏览器带着票据(在url参数里)跳转回a系统。

  3. a系统这时候被传入了票据,系统内部用curl之类的方法去s系统验证票据(还要带上自身系统的key等证明a系统的这点验证合法性),如果是授权票据(即便登录了s系统,也不代表可以登录a系统,具体由s系统判断发放的票据登录权限),那么就让进入,否则就接着跳转回s系统的登录界面。

楼主可以部署一下某java版开源单点登录系统,了解具体用法和流程。也可以搞下OAUTH2.0之类的授权系统。

PHP中文网

推荐使用UCenter或者OpenCenter,都可以轻松实现单点登录

PHP中文网

b,c提供个获取token的接口,登陆成功刷调下就行

阿神

可以考虑用cookie来存储、传递

伊谢尔伦

主站在登陆完成后,在登录服务器跳转回来后的那个页面加上跨域代码,同时发送给从站(或者说其他站点)即可,代码如下

<script src=xxxx.com?token=aaaaaa>

这样在xxxx里面即可获取token,处理验证即可

黄舟

楼主的意思应该是:3个系统,跨域不知道怎么保存sessionid吧。 可以考虑下 UCenter 或者 PHP利用P3P实现跨域。

天蓬老师

一般token是经过一些加密算法+salt算出来的,B、C接收到token使用同样的加密算法验证就可以了。

阿神

token不是被传回B、C系统了吗?可以直接连redis,规范点就将token放到参数或Header上请求S系统的专门接口。

PHP中文网

把token值存入Redis。

  1. 用户在S系统登录后,通过一定算法生成一个key值,然后把token或用户登录信息以key-value形式存入Redis共享;
    2.运用特定算法,将key值加密以cookie形式存储在客户端;

3.当访问A、B等系统时,直接检测此cookie值,然后逆运算得到key值,进而获取token,若不存在则跳转到S系统登录;

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号