phpcms 通信失败所有解决方案,phpsso通信原理

2020-12-28 00:49:01 阅读 0评论 2

温馨提示:

最后更新时间2020-12-28 00:49:01,若内容或图片失效,请留言反馈!

phpcms 通信失败所有解决方案,phpsso通信原理
 
这篇文章深入探讨下phpcms v9的phpsso单点登录通信原理。
 
 
phpcms 通信失败所有解决方案,phpsso通信原理
 
 
如果遇到phpcms应用通信失败,大概有以下几个方面的问题:
 
1、系统配置错误,需要注意后台配置的通信密钥要和phpsso中配置的一致。
 
2、系统配置文件system.php和数据表v9_sso_applications没有更新成功导致的phpcms通信失败,有可能是文件权限问题。
 
3、服务器防火墙拦截,需要注意下将服务器本身ip加到白名单里。
 
4、服务器环境问题, 如果win系统,可以尝试将 127.0.0.1 localhost 加到host文件中。
 
5、系统对post,get 或者ua的限制。
 
我自己测试的phpcms因为对空UA做了限制,所以在使用file_get_contents()方法时,一直提示通信失败,所以才有了今天这篇文章。
 
 
一、通信测试加密机制
 
1、在配置完phpcms之后,访问应用管理,就会请求
 
【/phpsso_server/index.php?m=admin&c=applications&a=check_status&appid=1】
 
其中的appid就是我们创建的应用id,在后台能看到。
 
phpcms 通信失败所有解决方案,phpsso通信原理
 
 
2、找到“\phpsso_server\phpcms\modules\admin”下的applications.php文件,就能看到上面请求的方法【check_status】。
 
获取到加密后的密钥:【$param】
 
【$param = sys_auth('action=check_status', 'ENCODE', $applist[$appid]['authkey']);】
 
其中,sys_auth是一个系统函数,在phpcms\libs\functions\global.func.php,用于加密和解密。
 
这个加密的方法就是,用我们前面配置的应用密钥authkey,加上关键词“action=check_status”进行加密。
 
然后形成一个新的字符串给$param。
 
3、接下来是最关键的一步了,我做测试的时候就是卡在这里,导致phpcms通信不成功。
 
这里有一个$url,是我们配置的通信地址,加上api接口文件,api.php?op=phpsso&,实际上$url是这么个东西:
 
$url = 'http://www.testtessttest.com/api.php?op=phpsso&';
 
然后就是带着前面加密出来的$param请求这个api.php的文件,操作方法是phpsso。
 
 
二、phpcms通信解密机制
 
4、【$data = @file_get_contents($url.'code='.urlencode($param))】
 
file_get_contents()是一个php系统函数,用于将一个文件读取到字符串中,php5.1以上支持。
 
也就是这段代码会请求这么一个东西:
 
file_get_contents(http://www.testtessttest.com/api.php?op=phpsso&code=92cfaxBifLb5MJzuQyKd5ee0D0UTIazEr6tgbMdkDEQ6ztg6AWtk4brm6SSmcI2d)
 
注意:如果服务器配置了禁止空UA访问,或者禁止过一些爬虫,这里可能就请求失败了,直接返回0了,也就是phpcms的通信失败。
 
 
phpcms 通信失败所有解决方案,phpsso通信原理
 
 
5、上面的请求实际上是请求到/api/phpsso.php文件了。
 
在phpsso.php文件中:$code = $_REQUEST['code'];
 
就上网址上带着的code,给到$code。
 
6、接下来就是对$code解密了。
 
parse_str($client->sys_auth($code, 'DECODE'), $arr);
 
执行完上面代码,如果是空的就直接返回0,还是通信失败。
 
不空返回:$action = $arr['action'];
 
其实这个$arr数组中,如果$code没错,就只有一个“check_status”,也就是:
 
array(1) {
  ["action"]=>
  string(12) "check_status"
}
 
我就一目了然了。
 
if ($action == 'check_status') exit('1');
 
就可以返回1了。
 
7、上面执行的不论返回1还是0,都是在【phpsso_server\phpcms\modules\admin\templates\applications_list.tpl.php】文件中判断返回值:
 
 
这篇文章深入探讨下phpcms v9的phpsso单点登录通信原理。
 
communication_success:通信成功
communication_failure:通信失败
 
上面就是phpcms的phpsso通信原理了,下面说说为什么,只是我的理解,不一定完全正确。
 
(1)、这个phpsso,一般也叫单点登录,SSO,(SingleSignOn),也就是多站点可以使用同一套登录系统,现在很多网站都在使用这个。
 
比如:随便编的网址。
 
sso.jd.com 单点登录api接口。
user.jd.com 用户中心。
order.jd.com 下单地址。
cart.jd.com 购物车。
coll.jd.com 收藏夹。
 
对网络请求来说,只要是不同域,就存在跨域问题,有跨域问题,登录就是个问题,总不能用户换个地址,让重新登录吧。
 
一般的登录信息保存在cookies中,和session配合使用。
 
有了单点登录之后,用户在一个地方登录,可以是cart.jd.com,也可以是order.jd.com,只要登录成功了,就可以“共享cookies”给其他站点。
 
用户也就是无感知的在几个不同的域之间反复横跳,也不会让他再登录。
 
有了单点同步登录,就可以同步退出。
 
开源系统里使用的最多的是Ucenter,这款sso,和DZ一起长大的,用的系统不少。
 
(2)、phpcms的这个phpsso,也可以实现上面的功能,只需要添加应用就好了,添加完这后,如果是其他系统,就需要一个api接口验证,就是上面的那个流程。
 
(3)、对phpcms来说,这个phpsso其实还是有点鸡肋的。
 
后台管理登录,不需要phpsso,会员登录,在同一个域下也体现不出来,估计当时开发这套系统的同学,可能想得很久远,甚至有干掉uc,成为cms界的站群扛把子吧。
 
只是没成想,移动互联网来了之后,一切都变了,加上国内站长数量减少,开源cms日子不好过。
 
国内的像z-blog,dedecms,dz,phpwind,Empirecms都不容易,致敬这些开源同学。
 
文章版权声明:除非注明,否则均为林羽凡原创文章,转载或复制请以超链接形式并注明出处。
林羽凡

林羽凡V

林羽凡博客,是一个记录自己生活、互联网技术的原创独立博客 Linyufan.Com

4259 文章
16545 评论
20844977 浏览

了解一下?

  • 了解一下?

优质服务器推荐

  • 软云_RuanCloud

活跃朋友

最新留言

    欢迎加入:heo-出家人:
    邹江 • 时间 16小时前
    WC,凡哥也整上软云了:heo-出家人:
    邹江 • 时间 16小时前
    我能坚持每天5公里,就不错了!
    八字123 • 时间 22小时前
    你是在保密局工作吗,家里嘴这么严,才让你知道。????
    jeffer.z的博客 • 时间 1天前
    欢迎加入!!!
    老张博客 • 时间 1天前
    @ 林羽凡还好,还好。问题不大,下雨什么的也没什么感觉
    obaby • 时间 2024年03月26日 20:27:24
    摔提挺严重呀。祝早日康复!:heo-感动:
    粽叶加米 • 时间 2024年03月26日 11:47:30
    这一看就好痛,本好奇宝宝曾经让汽修厂的升降机烟断过脚趾头。单腿蹦哒了三个月。:heo-泪奔:
    obaby • 时间 2024年03月26日 10:47:39
    @ 林羽凡开玩笑的,不会跑,我被cc,还是他给我解决的,当然备份还是必须的。数据安全第一,用谁的服务器都得备份。
    jeffer.z的博客 • 时间 2024年03月26日 09:12:10
    我也是软云????,一夜之间都在用,这要是jun跑路了,他就在博客圈火了,明天我也写一篇我和他的事情,很有意思。
    jeffer.z的博客 • 时间 2024年03月25日 23:30:05
    这得好好休息一段时间了
    dujun • 时间 2024年03月25日 21:29:29
    也是蛮厉害的人,完骑车才骑十多公里。
    惭愧呀,我得慢慢努力啦。
    争取早日摆脱菜腿称号。:heo-笑哭:
    Net • 时间 2024年03月25日 17:17:13

再了解一下?

  • 林羽凡待办
取消
支付宝二维码
支付宝二维码
微信二维码