扫码关注官方订阅号
我做了一个单点登录遇到一个问题是:比如有A、B、C三系统,当没有登入的时候会跳到S系统进行登入,登入成功会生成一个token,并把token传回来,同时会把token存到redis里面。但是B、C系统如何去获取那个token?
走同样的路,发现不同的人生
亲,你现在都存入redis了,B、C链接上redis然后直接从redis里面取不可以吗
redis
有N多理由反对采纳的答案。首先发放票据和验证票据的过程不对(这个系统通常还要做双机热备等防单点失效,或者分布式之类的)如其他人所说,100个系统难道说推送100个?超时什么的怎么搞?如果有一个系统登出了,其他系统应该也要登出?如果被修改了权限,只允许登录A,不允许登录B,怎么搞?
不存在跨域问题的。
进入a系统的时候,跳转去s系统。
s系统验证账号后,让浏览器带着票据(在url参数里)跳转回a系统。
a系统这时候被传入了票据,系统内部用curl之类的方法去s系统验证票据(还要带上自身系统的key等证明a系统的这点验证合法性),如果是授权票据(即便登录了s系统,也不代表可以登录a系统,具体由s系统判断发放的票据登录权限),那么就让进入,否则就接着跳转回s系统的登录界面。
楼主可以部署一下某java版开源单点登录系统,了解具体用法和流程。也可以搞下OAUTH2.0之类的授权系统。
推荐使用UCenter或者OpenCenter,都可以轻松实现单点登录
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系统的专门接口。
把token值存入Redis。
用户在S系统登录后,通过一定算法生成一个key值,然后把token或用户登录信息以key-value形式存入Redis共享;2.运用特定算法,将key值加密以cookie形式存储在客户端;
3.当访问A、B等系统时,直接检测此cookie值,然后逆运算得到key值,进而获取token,若不存在则跳转到S系统登录;
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
亲,你现在都存入
redis了,B、C链接上redis然后直接从redis里面取不可以吗有N多理由反对采纳的答案。
首先发放票据和验证票据的过程不对(这个系统通常还要做双机热备等防单点失效,或者分布式之类的)
如其他人所说,100个系统难道说推送100个?超时什么的怎么搞?
如果有一个系统登出了,其他系统应该也要登出?
如果被修改了权限,只允许登录A,不允许登录B,怎么搞?
不存在跨域问题的。
进入a系统的时候,跳转去s系统。
s系统验证账号后,让浏览器带着票据(在url参数里)跳转回a系统。
a系统这时候被传入了票据,系统内部用curl之类的方法去s系统验证票据(还要带上自身系统的key等证明a系统的这点验证合法性),如果是授权票据(即便登录了s系统,也不代表可以登录a系统,具体由s系统判断发放的票据登录权限),那么就让进入,否则就接着跳转回s系统的登录界面。
楼主可以部署一下某java版开源单点登录系统,了解具体用法和流程。也可以搞下OAUTH2.0之类的授权系统。
推荐使用UCenter或者OpenCenter,都可以轻松实现单点登录
b,c提供个获取token的接口,登陆成功刷调下就行
可以考虑用cookie来存储、传递
主站在登陆完成后,在登录服务器跳转回来后的那个页面加上跨域代码,同时发送给从站(或者说其他站点)即可,代码如下
这样在xxxx里面即可获取token,处理验证即可
楼主的意思应该是:3个系统,跨域不知道怎么保存sessionid吧。 可以考虑下 UCenter 或者 PHP利用P3P实现跨域。
一般token是经过一些加密算法+salt算出来的,B、C接收到token使用同样的加密算法验证就可以了。
token不是被传回B、C系统了吗?可以直接连redis,规范点就将token放到参数或Header上请求S系统的专门接口。
把token值存入Redis。
用户在S系统登录后,通过一定算法生成一个key值,然后把token或用户登录信息以key-value形式存入Redis共享;
2.运用特定算法,将key值加密以cookie形式存储在客户端;
3.当访问A、B等系统时,直接检测此cookie值,然后逆运算得到key值,进而获取token,若不存在则跳转到S系统登录;