1.微信小程序ofo小黄车+thinkphp5.0打造全栈应用
2.Discuz!ML 3.x任意代码执行漏洞之大佬分析之后我分析
3.金手指代码是单车单车什么?
4.物联网Lora技术应用有哪些?Lora无线通讯模块有什么优缺点?
5.CIAM (用户身份管理)选型指南
微信小程序ofo小黄车+thinkphp5.0打造全栈应用
在深入理解了微信小程序和ThinkPHP5.0框架后,我决定为ofo小黄车开发一个微信小程序,项目以解决其在支付宝上的源码源码使用不便问题。由于原小程序仅模拟了数据,共享没有真正的单车单车数据库和后台,我决定使用所学知识进行重构。项目android小猫钓鱼源码我制作的源码源码小程序包含首页、支付页面、共享计费页面、单车单车开锁页面、项目用车页面、源码源码充值页面、共享个人中心页面和我的单车单车钱包页面等功能。
在设计小程序架构时,项目我首先考虑了数据库结构。源码源码我设计了用户表、小黄车表、故障分类表、故障记录表、充值表、骑行记录表等,以支持小程序的各个功能。
小程序的核心知识体系包括ThinkPHP5.0相关知识、微信小程序与微信支付的集成、以及API接口设计。我特别关注了首页、登录、个人中心、充值页面、立即用车页面、计费页面、故障页面和支付页面的逻辑与所需接口分析。
在首页,用户需要获取单车信息,我设计了相应的接口。立即用车按钮的逻辑包括验证用户是否登录、登录是否有效、用户是否有押金等。如果用户已登录且有押金,程序将跳转至用车页面;否则,用户会被引导至充值页面或重新登录页面。登录页面和个人中心页面同样需要考虑用户状态验证和token管理。
在支付页面,用户完成充值或支付后,系统会更新用户余额和骑行记录。计费页面和故障页面的逻辑也需与支付页面接口进行交互,以确保数据一致性。
在开发过程中,我运用了ThinkPHP5.0的事务处理能力来确保数据库操作的一致性。此外,社区 源码我还自定义了全局异常类和验证器,以增强程序的健壮性和可维护性。最终,我使用restful API风格设计了接口,使其更加符合现代Web服务标准。
小程序制作完成后,我对其进行了全面测试,确保所有功能都能正常运行。在开发过程中,我深刻理解了前后端分离的开发理念,这有助于提高代码的复用性和可维护性。我将整个项目和源码上传至GitHub,以供有需要的开发者参考和使用。感谢慕课网和讲师七月老师的课程,这门课程对我的影响巨大,改变了我对传统互联网开发的看法。
Discuz!ML 3.x任意代码执行漏洞之大佬分析之后我分析
首先附上米斯特安全大佬们文章的链接,刚开始有些东西我没看的太懂,于是我就再添了点东西,希望像我一样的小白也能看懂。
一、漏洞综述
漏洞类型:代码执行漏洞
影响系统及版本:Discuz!ML V3.2-3.4
漏洞原因:Discuz!ML 系统对cookie中的l接收的language参数内容未过滤,导致字符串拼接,从而执行php代码。
二、漏洞分析
根据米斯特大佬们提供的报错界面,我对其中的三个报错点一一进行了分析,三个报错点如下图所示(还有米斯特大佬们的水印)。
2.1 报错点一分析
发现首先是portal.php函数出错,把这张图放大看,发现是对cookie中的language参数进行拼接而导致的报错,根据这个参数的语义判断应该是调用语言模板的时候因为找不到相应的模板而发生的错误,那么先定位portal.php报错的第行,该文件路径:
紧接着定位libfile函数,文件加载路径函数。
函数介绍:
libfile($libname, $folder = ”),包含2个参数:$libname 和 $folder,该函数读取source目录下的$folder子目录作为基础部分。
libfile函数源代码如下图所示:
DISCUZ_ROOT为定义网站根目录的常量,realpath函数为返回绝对路径函数,到此处第一个报错就已经分析完毕,原因是系统因为找不到一个php文件而报的错。
2.2 报错点二分析
还是先根据错误定位到引用函数文件,文件路径source/module/portal/portal_index.php,然后定位到源函数所在的文件,引用的地方好定位,位置在/source/function/function_core.php,直接上图
然后这个函数写的还贼长,哎,红包源码没得办法,这个时候只能靠运气了,搏一搏,单车变摩托,首先百度,这个函数的作用也就是个调用模板的函数。
然而这个函数写了行代码,找个大表哥的写的代码注释吧,先扔个参考链接 discuz.net/thread-...
此时我发现了思路有些繁琐,然后就去找第三个错误的提示内容,为了找到是哪里出了问题,我把这段代码放到了txt文件中,根据第三个错误提示的信息开始了全文搜索,终于,根据关键字tpl.php值搜索到一处与language这个函数语义有关的东西DISCUZ_LANG。
既然是语言参数出了问题,还是个常量,那就去找找常量定义的地方,全局搜DISCUZ_LANG,跟踪到/source/class/discuz/discuz_application.php
可以看到,将$lng的值给了DISCUZ_LANG,追踪$lng在何处定义,全局搜索$lng,找到了定义$lng的地方(图中第一个箭头)
到此为止,又出现个var,这是个啥,我只知道var[‘cookie’][‘language’]的意思就是cookie中的language的值。
以上可以分析出,从获取language到DISCUZ_LANG拿到值的过程中,并没有对其进行过滤。
那么现在必须确定报错问题是怎么出现的了,看下图:
出现了这样的代码,直接拼接,然后RCE
拼接单引号和'.phpinfo().'
按理来说可以RCE
总结下大概流程从cookie中获取了language的值,然后给了$lng,接着$lng又给了DISCUZ_LANG,系统通过template函数调用模板文件,template函数执行,执行到$cachefile的时候,执行构造的代码。
三、漏洞复现
访问站点www.***.com/forum.php,刷新页面抓包
*本文作者:xxx,转载请注明来自 FreeBuf.COM在language参数处'.phpinfo().'
返回内容:
复现成功。
看起来复现大佬们的漏洞还是挺有意思的,开心。
金手指代码是什么?
《口袋妖怪》:圣灰金手指代码大全如下:技能机器:
只要把所在位置上或全部改为,即可拥有每种技巧机个!
所在位置AA--A,vb 源码一共个!
训练机序号 名称 获得场所 威力 PP
技巧训练机爆裂拳 在丹巴市(唐巴城)的道场主人那里得到。
技巧训练机头撞 在姥目森林(哈威森林)中获得,黄金市百货的5F也可以买到。
技巧训练机诅咒 由位于玉虫市的公寓中获得。 --
技巧训练机滚动 位于号道路的左侧。
技巧训练机吼叫 从在号道路的男子手上获得。 --
技巧训练机剧毒 由石竹市的道场主人杏子那里获得。 --
技巧训练机电磁炮 解决发电厂事件后,由所长那里得到。
技巧训练机岩碎 在第号道路获得,黄金市百货的5F也可以买到。
技巧训练机自我催眠 把No.从黄版传到金银版,把它身上的物品卸下, 便是了。 --
技巧训练机觉醒力量 在愤怒湖或是玉虫市的百货2F得到。 --
技巧训练机日本晴 黄金市广播塔解放后可以得到,也可以在玉虫市的百货得到。 -- 5
技巧训练机香甜气息 在姥目森林(哈威森林)北边的关卡,与右边的女人谈话。 --
技巧训练机鼾声 第号道路获得。
技巧训练机暴风雪 黄金市游戏中心枚交换。
技巧训练机破坏光线 玉虫市游戏中心枚交换。
技巧训练机冰结之风 从丁香镇(丁字镇)的道场主人手中得到。
技巧训练机守护 玉虫市百货的2楼元购买。--
技巧训练机祈雨 呆呆兽井的地下或在玉虫市百货2楼买到。-- 5
技巧训练机百万威力吸取 由玉虫市道场主人获得。
技巧训练机忍耐 烧毁的塔(宝塔)地下。 5
技巧训练机撒气 星期日在黄金市百货5楼获得。--
技巧训练机太阳光线 号道路下方。
技巧训练机钢之尾 由浅黄市道场主人得到。
技巧训练机龙之息吹 由熏烟市道场主人得到。
技巧训练机闪电 黄金市游戏中心枚交换。
技巧训练机地震 冠军道路。
技巧训练机报恩 星期日在黄金市百货5层获得。--
技巧训练机挖洞 在自然公园左下方。
技巧训练机精神干扰 玉虫市游戏中心得到或山吹市的超能力老人那里。
技巧训练机影子球 由槐树市道场主人得到。
技巧训练机扔泥 由桔梗市(归侨城)道场主人得到。
技巧训练机影分身 在玉虫市游戏中心枚交换。--
技巧训练机冷冻拳 黄金市百货5层元购买。
技巧训练机虚张声势 浅黄市(浅木市)灯塔5层中得到。--
技巧训练机梦话 黄金市百货地下二层。--
技巧训练机泥爆弹 号道路的关卡获得。
技巧训练机沙尘暴 号道路的民家或玉虫市百货2楼。--
技巧训练机大字火 黄金市游戏中心枚交换。
技巧训练机流星 连接道路的洞穴地下1层。
技巧训练机变圆 研钵山(巴奇山)中央入口进去后位于大瀑布洞穴中。--
技巧训练机闪电拳 黄金市百货5层元购买。
技巧训练机食梦 和睡在常磬市(时而镇)左侧的框架源码人交谈。
技巧训练机看穿 愤怒湖的左上方。-- 5
技巧训练机睡眠 冰之通道(冰天地)B2F。--
技巧训练机着迷 黄金市(黄金城)道场主人获得。--
技巧训练机盗窃 火箭队老巢的B2F。
技巧训练机钢之翼 号道路上的民家中。
技巧训练机火焰拳 黄金市百货5层元购买。
技巧训练机连续切 柏树镇道场主人得到。
技巧训练机恶梦 将号道路的警卫的信件送到号道路的胖子那里即可得到。--
秘传机器:
只要把秘传机所在位置改为即可!
所在位置AC--A,一共7个!(其实是个,只不过游戏程序不叫我们用那五个,招式太厉害了,破坏游戏平衡性!)
秘传机 序号 名称 获得场所 威力 PP
秘传训练机砍树 姥目森林(哈威森林)帮助寻找大葱鸭得到。
秘传训练机飞行 打败丹巴市(唐巴城)道场主人后与道场前的女子谈话。
秘传训练机冲浪 将槐树市五位使用不同伊贝的少女击败,与观众席上的男子交谈。
秘传训练机怪力 浅黄市(浅木市)民家获得。
秘传训练机闪光 花苞之塔(马丹蕾塔)长老处获得。--
秘传训练机漩涡 摧毁火箭队老巢后,小渡会给你。
秘传训练机攀瀑 冰之通道(冰天地)1层。
精灵球以及取得方法:
名字 颜色 功能 取得地点
精灵球 红 捕获率% 商店/道路
超级球 蓝 捕获率% 商店/道路/洞窟/不可思议的礼物
高级球 金黄 捕获率% 商店/道路/洞窟
大师球 绿 捕获率% 打完8个道馆,找空木博士拿/中头奖
A0 诱饵球 蓝 容易抓钓竿钓到的,把青色种子给工匠。
9F 等级球 浅咖啡 容易抓等级比自己高的,把红色种子给工匠。
A5 月亮球 灰 容易抓用月亮之石进化的,把色种子给工匠。
A4 友谊球 浅咖啡 抓到的怪兽容易亲近,把绿色种子给工匠。
9D 重量球 灰 容易抓比自己重量重的,把黑色种子给工匠。
A6 异性球 橙 容易抓姓别跟自己不同的,把桃色种子给工匠。
A1 速度球 蓝 容易抓速度快的,把白色种子给工匠。
B1 昆虫球 灰 抓虫大会用的,抓虫大会时会给你。
种子和具体位置:
名字 用途 取得地点
白色种子 可作为速度球的材料 哈威城的树。
红色种子 可作为等级球的材料 号道路的树。
青色种子 可作为诱饵球的材料 号道路的树。
黑色种子 可作为重量球的材料 号道路的树。
桃色种子 可作为异性球的材料 号道路的树。
5D 绿色种子 可作为友谊球的材料 号道路的树。
5C **种子 可作为月亮球的材料 号道路的树。
进化道具及位置:
物品名称 进化的pokemon 取得地点
8F 金属外套:飞天螳螂/大岩蛇(通信交换)
1.亚速亚号事件结束后
2.野生的小磁怪身上可能带有
龙之鳞片:海刺龙(通信交换)
1.研钵山2层
2.野生的墨海马/海刺龙/迷你龙身上可能带有
AC 升级卡:3D龙(通信交换)
山吹市
王者之印:呆呆兽/蚊香蝌蚪(通信交换)
1.呆呆兽之井(洞穴深处的那个人给的)
2.野生的呆呆兽/呆河马/蚊香蛙可能带有
火之石:六尾/卡蒂狗/伊布
拿六尾给正辉的爷爷看
水之石:蚊香蛙/大舌贝/海星星/伊布
拿海星星给正辉的爷爷看
雷之石:皮卡丘/伊布
拿皮丘给正辉的爷爷看
草之石:臭臭花/口呆花/蛋蛋
拿行路草给正辉的爷爷看
月亮之石:皮皮/胖丁/尼多力诺/尼多娜
1.妈妈会买给你
2.塔上瀑布
3.星期一晚月见山里的皮皮仪式
A9 太阳石:臭臭花/太阳种子
捉虫大赛第一名
其他道具:
道具前面是它的源代码,比如 就是有一个(就是)精灵球(就是),从A以后就是道具位置,注意,不要修改得超出道具栏了!
代码—正式名称—用途—中文版翻译名称
光粉 降低对手命中率. (装备) 海子球
自行车 旅行速度X2. 单车
月石 进化一些Pokemon 月石
中毒剂 治愈中毒的Pokemon 解毒
0A 烧伤剂 治愈烧伤的Pokemon 治烧伤
0B 冰冻剂 治愈冰冻的Pokemon 解冻
0C 催醒剂 把睡着的Pokemon叫醒 唤醒
0D 麻痹剂 治愈麻痹的Pokemon 解痹
0E 恢复药 恢复所有HP并治愈异常状态 恢复药
0F 最大补血剂 补满Pokemon的HP 金丹
超级补血剂 回复Pokemon的HP. 银丹
高级补血剂 回复的Pokemon的HP 红丹
补血剂 回复的Pokemon的HP 白丹
逃跑绳 在山洞中逃跑用 大年
除虫剂 走步不会遇到Pokemon 皮皮
完全PP回复 回复一个Pokemon的所有PP 表皮
火石 进化一些Pokemon 火焰石
雷石 进化一些Pokemon 雷之石
水石 进化一些Pokemon 水石
1A HP提升 提升一个Pokemon的HP 比秋
1B 蛋白质 提高Pokemon的攻击 牛磺
1C 铁 提高Pokemon的防守 挨汛
1D 碳水化合物 提高Pokemon的速度 沙波
1E 幸运拳套 提高幸运蛋命中要害的机率 其
1F 钙 提高Pokemon的特攻特防 卡思
神奇涛淦鼷 提高Pokemon一级 玛胡
X命中率 战斗中提高命中率 X爱
草石 进化一些Pokemon
金属粉 提高百变怪的防守(装备) 本参
金矿 纯金卖好价钱。 金块
皮皮娃娃 从野生Pokemon逃走 精灵垛
全治愈 治愈所有异常情况 福愈
复活 复活一个Pokemon并回复1/2 HP. 雷胡
精神草 完全复活一个Pokemon
守卫符 防止技能指数受敌人影响 沙事
2A 超级除虫剂 步不遇到Pokemon 拓者
2B 最大除虫剂 步不遇到Pokemon 大皮皮
2C 命中装置 战斗中提高命中要害机率 第雷
2E 新鲜水 回复HP 橙汁
2F 苏打水 回复HP 汁子
柠檬汁 回复HP 椰汁
X攻击 战斗中提高攻击 X击
X防守 战斗中提高防守 X防
X速度 战斗中提高速度 X速
X特殊 战斗中提高特攻特防 X力
硬币盒 可装枚硬币 吉姆
探测器 寻找看不见的物品
EXP分享器 分享经验值(装备) 学习装置
3A 旧钓竿 钓水系Pokemon用 竹杆钩
3B 好钓竿 较好的抓水系Pokemon用的钓竿 木杆钩
3C 银色羽毛 奇怪的银色羽毛 银叶子
3D 超级钓竿 最好钓水系Pokemon用的钓竿 铜杆钩
3E 提高PP 提高一个招式的最大PP
3F 回复PP2 回复一个招式的个PP
完全回复PP2 完全回复一个招式的所有PP 井尖
回复PP3 回复所有招式个PP 尖在
红色鳞片 红色暴鲤龙掉下的鳞片
全能药 治疗好任何Pokemon(剧情道具)
船票 乘船用 船票
神秘的蛋 从精灵爷爷那儿得到的蛋
透明铃铛 捕捉凤凰必带道具 比秋
银翅膀 发亮的银色翅膀 热牛奶
牛奶 回复HP 雪瓜汁
先制之爪 提高速度(装备) 灼灼灼
4A 防毒果实 治愈中毒(装备) 解毒果
4D 金色树叶 奇怪的金色树叶 金叶
4C 软沙子 提高地面系绝招威力(装备) 柔沙
4D 尖利的鸟嘴 提高飞行系绝招威力(装备) 尖啄
4E 防麻果实 治愈麻痹(装备) 解痹
4F 烧过的果实 治愈冰冻(装备) 烧果
冰过的果实 治愈烧伤(装备) 冰果
毒针 提高毒系绝招威力(装备) 仿毒
王者之印 可能惊吓对手(装备) 王印
苦果实 治愈混乱(装备) 苦果
清醒果实 治愈被催眠(装备) 薄果
红栗子 红栗子
小蘑菇 卖不了高价钱
大蘑菇 卖高价
银粉 提高虫系绝招威力(装备) 银粉
蓝栗子 蓝栗子
5B 钱戒指 双倍获得金钱(装备)
5C 黄栗子 黄栗子
5D 绿栗子 绿栗子
5E 避敌丸 装备后就难和Pokemon相遇了 凡票
5F 神秘的水滴 提高水系绝招威力(装备) 神滴
勺子 提高超能系绝招威力(装备) 白栗
白栗子 白栗子
黑腰带 提高格斗系绝招威力(装备) 黑栗
黑栗子 黑栗子
粉红栗子 粉红栗子
墨镜 提高邪恶系绝招威力(装备) 美尾
呆呆兽的尾巴 卖高价 粉带
粉红缎带 提高常规系绝招威力(装备) 长葱
短棍 卖低价 烟弹
6A 烟雾球 从野生Pokemon逃走(装备) 寒冰
6B 千年寒冰 提高冰系绝招威力(装备) 磁石
6C 磁铁 提高电系绝招威力(装备) 奇果
6D 奇迹果 治愈所有异常情况(装备) 小珠
6E 珍珠 卖低价
6F 大珍珠 卖高价
不变石 停止进化(装备) 身符
幽灵标签 提高鬼系绝招威力(装备) 护身符
愤怒湖馒头 回复HP 芝世
济符球 让人不可思议(游戏上是这么显示的) 世革
蓝色的卡 参加电台抽奖用的
奇异种子 提高草系绝招威力(装备) 攻芭
骨头 一种骨头,卖低价 芭凶
毅力缎带 可能防止死(装备) 凶区
能量粉 回复HP
7A 能量根 回复HP
7B 治愈粉 治愈所有异常情况
7C 复活药 复活Pokemon
7D 硬石头 提高岩石系绝招威力(装备) 炙弱
7E 幸运蛋 领取额外的经验值(装备)
7F 卡片钥匙 广播塔百叶窗的钥匙
机器零件 发电场被偷的零件
贸易券 好象是贸易中心用的
掉了的物品 金黄市模仿女孩掉了的娃娃
星尘 红色,卖高价。
星星碎片 卖非常高的价
地下室钥匙 打开门 他砂
车票 乘火车用。 砂仙
8A 木炭 提高火系绝招威力(装备) 贡字
8B 果汁 回复HP.
8C 瞄准镜 提高命中要害机率(装备)
8F 金属外套 提高钢铁类型绝招威力(装备) 顺晨
龙牙 提高龙系绝招威力(装备) 晨或
剩饭 在战斗中回复HP(装备)
神秘果实 回复PP
龙的鳞片 一种珍贵的龙类物品
超梦的遗传因子 提高攻击但会混乱
9C 圣灰 复活所有Pokemon
9E 鲜花邮件 印有鲜花(装备) 晨虎球
A3 心之水滴 提高特攻的奇怪球体(装备) 顺迪
A7 常规箱子 打开看看里面有啥
A8 神秘魔盒 打开看看里面有啥
A9 太阳石 进化一些Pokemon
AA 粉红缎带 提高常规系绝招的威力(装备) 汪及
AC 升级盒 Silph Co.制造的神秘箱子 闪轴
AD 树木果实 一种补血物品(HP,装备)
AE 黄金果实 一种补血物品(HP,装备)
AF 杰尼龟水壶 用来浇树用
B2 彩虹羽毛 彩虹颜色的神秘羽毛 外量
B4 砖型碎片 一种珍贵的碎片 少友
B5 冲浪邮件 邮件上印有乘龙(装备) 友泊
B6 淡蓝色邮件 上面印有迷你龙(装备) 泊宵
B7 肖像邮件 上面印有携带信件精灵 宵欠
B8 可爱邮件 印有心(装备) 欠左
B9 永世邮件 印有伊布(装备) 左电
BA 变形邮件 印有百变怪(装备) 电恨
BB 蓝天邮件 印有蓝天(装备)
BC 音乐邮件 印有超能鸟(装备) 于慢
BD 雾气信件 全则
物联网Lora技术应用有哪些?Lora无线通讯模块有什么优缺点?
Lora无线通讯技术在物联网领域应用广泛,从共享单车到智能水电表,Lora都扮演着重要角色。Lora无线技术凭借其独特的特性,成为低功耗广域网(LPWAN)的首选方案之一。
首先,Lora的低功耗特性是其一大优势。接收电流仅为mA,睡眠电流小于nA,这大大延长了电池的使用寿命,减少了电池供电设备的功耗。
其次,Lora的传输距离远,与传统无线技术相比,其在低速空旷条件下的传输距离可达公里。这是因为Lora解调信号的信噪比与-dB,远高于调频制式的dB,使得其范围和距离显著扩大。
在抗干扰能力方面,Lora采用扩频技术,通过高扩频因子提高了无线通讯的抗干扰能力。即使在同一频率下同时发送信号,也不会相互干扰。
Lora的无线穿透力也更强,Mhz无线传输频率下的发射功率下,其穿透能力比传统ASK技术提高了5倍以上。
关于Lora的无线通讯速率,它支持半双工通讯,速率范围从bps到5.4kbps。这足以支持无线升级设备固件,满足物联网应用的需求。
在产品开发应用中,Lora模块为工程师提供了便利。产品开发时只需按照模块接口和文档完成设计,大大简化了产品开发流程。模块集成的无线通讯协议栈,减少了开发者需要处理的繁琐工作。
使用Lora模块进行产品开发的优势还包括更短的开发周期和更省心的产品调试。当无线通讯出现问题时,厂家会提供支持,快速解决处理。
然而,市面上的Lora模块通用性较强,但可能无法完全满足特定产品的尺寸、功能和接口需求。如果找到合适的模块困难,企业可以选择向模块厂家定制,或自行研发。
针对Lora模块的开发与设计,无际单片机编程提供了全面的教程和开发板,深入解析了芯片级的开发流程,有助于节约成本。
此外,无际单片机还分享了单片机入门到高级教程工具包,以及个热门项目源码、原理图、PCB设计和说明文档,非常适合初学者和进阶学习者。
获取这份资料包和加入单片机交流群,可以点击下方卡片扫码免费领取,或者联系无际单片机获取更多技术支持和学习资源。
CIAM (用户身份管理)选型指南
你是否正在构思下一个面向消费者的爆款应用?
为了使这个应用获得成功,你必须服务好你的用户,让用户旅程在你的应用中更加便捷,而「用户旅程」的第一步即是「用户的认证及管理」(CIAM)。那么我们该如何设计用户认证体系?
你听到一个声音:“看看微信”。你说服自己这不是抄袭,这叫“看业界”。“飞机都是两个翅膀,汽车都是四个轮子,E 总是等于 mc^2。我哪有抄袭”
来到微信的登录界面才发现,仅仅一个登录,就已经非常复杂了。那再看看抖音吧,相对于微信来说,抖音不仅多了一个“电话号码一键登录”,还多了一个“微信登录”,而微信却没有“抖音登录”
作为创业者,你已经刷了很多励志视频,你笃定一个信念:办法总是比困难多。于是你暂时将自研的解决方案作为 Plan B 放到一边,开始寻找供应商来解决这个问题。
如果你是技术出身,或者当你咨询你的 CTO 时,不可避免的会出现一个思路,那就是基于开源来构建。同时,你还需要提前决策,你的应用是打算用小程序还是原生 App 来服务用户。
本文通过分析原生与小程序的利弊以及市面上主流用户身份管理(CIAM)的开源和商业系统,帮助你做出最优的 CIAM 选型决策。
在进入技术讨论之前,我们先回顾一下移动开发的历史。
0x 移动开发的兴起和转折
年毕业后我就一直工作在移动领域,先后服务于 Gameloft、Nokia、Samsung 和华为,我见证了诺基亚的倒下、三星的崛起、苹果的辉煌、华为的曲折。从 3G 兴起以来,我们都听闻过很多商业模式上的创新,每隔一段时间就会听说谁谁谁开发了一个 App,拿到了 xx 投资,移动开发人员在市场上炙手可热。
但 年的春节,移动开发领域迎来了一个重大转折:微信推出了小程序。这彻底改变了移动开发格局。之前任何的功能都需要一个 App 来承载,而现在很多功能只需要一个小程序。
但小程序并不能改变这样一个事实:每隔一段时间,就会出现一个现象级的 App。如抖音、头条、小红书、Keep、国家反诈中心 App,以及很多不大可能以小程序形式出现的 App,如以特斯拉为代表的车主 App、银行金融类 App、社交 App。
0x 原生 vs 小程序
小程序是基于 Web 技术实现的,优缺点也非常明显,对比如下:
基于以上对比,小程序更适合简单业务场景,如点餐、单车解锁、地铁扫码、出示健康码等。小程序缺点中的 “能力不全” 需要重点注意,建议开发者提前做好预研,避免开发到一半突然发现某个功能实现不了,例如推送功能非常有限。
0x 用户管理系统概览
此时,你已经在小程序和原生 App 之间做出了选择。接下来分析一下用户管理系统,主要对比参照目前国内主流身份认证管理服务商。
“随着时间的推移,以下分析可能会发生动态变化,请以发展的眼光审视。”
如果时间允许,可以尝试接入系统体验一下,相信很快就会发现各种问题。但由于用户管理系统在云厂商中属于细分部门,投入有限,响应速度也很慢。若涉及产品改动,那更是漫长的版本排期。事实上,即使强如 AWS,其用户管理系统 Cognito 也广受批评。
专业的事应该交给专业的人来做。
考虑到本文聚焦的是 CIAM,我们首先排除掉国内其它身份管理厂商,因为目前国内其它身份管理厂商主要聚焦的是 EIAM(企业内部用户管理系统),绝大多数面向 C 端场景的功能不足,体验有待优化。 于是,我们把目标锁定在 Authing、casdoor 这个两家服务商身上。不要被名字迷惑,如果你去 github 看他们的代码贡献者,会惊喜的发现程序员的头像都是二次元。
0x 需求清单
我梳理了一个典型的面向消费者的用户管理系统需求清单,我们可以拿着这份清单去匹配。以下表单中都是非常基础的功能。其他的诸如:多因素认证、人脸指纹识别、用户信息补全、扫码登录等请按需考虑。
0x Authing、casdoor 概览
0x Authing、casdoor 核心服务对比概览
Authing
Authing 提供整体基于 K8s 技术标准的私有化部署,并根据客户环境采用适合客户环境的高可用方案。但作为 POC,可直接使用 SaaS 版本,无需部署,开箱即用。
casdoor
写此文时,我采用了最新的 casdoor 1..0 版本。请参考官方文档启动本地服务: Server Installation
这是因为本地数据库未创建 ‘casdoor’ schema。遗憾的是,官网说会自动创建:
手动创建 schema 即可。
然后在浏览器里面输入 ponent),其丰富的开源组件对主流移动端开发语言的支持,帮助多端应用的开发者极大节省开发成本。
其中比较有意思的是语义化编程模型,感兴趣的同学可以参考下 : 基于语义化思想的全新编程模型
官方文档地址: casdoor android 接入
接入遇到第一个大的问题是 casdoor 不提供 aar 包,也没有 maven 依赖地址,所以要么下载他们的源码,自行打包成 aar,要么将源码拷贝到工程里面(需要同时拷贝 build.gradle、Manifest 以及 res)。
这样的方式对开发者非常不友好,想象一下每次升级 SDK,都得再做一遍打包或者拷贝的动作。
Android SDK 按照 github 上的文档可以顺利跑起来,但运行后页面无法正常显示,无论是使用本地服务,还是 casdoor 的示例服务( door.casbin.com)。
0x Authing、casdoor iOS 接入对比
官方文档地址: Authing iOS 接入
根据以上文档提示能顺利接入。和 Android SDK 一样,Authing iOS SDK,提供 Web、原生的接入方式,同时也提供原生 UI 控件。
官方文档地址: casdoor iOS 接入
所以对于 casdoor iOS 来说,目前基本处于不可用状态。
0x Authing、casdoor 小程序接入对比
官方文档地址: Authing 小程序接入
按照文档可以顺利接入。有一个讨论点是,“用户不存在”这样的返回应该当作异常处理吗?
目前还没有 SDK,只有一个 example,其内容也为空,正处于初步开发阶段。
GitHub - casdoor/casdoor-wechat-miniprogram-example
0 结论
以上对比之后发现,从产品能力和接入体验来说, Authing 在国内身份认证管理市场上是遥遥领先的。 开源的好处是,在成本允许的条件下,开发者总是可以基于开源自行扩展。而当前国内的开源项目在现阶段是非常粗糙的,离生产环境使用还有很大距离。端侧 SDK 只支持 Webview,这几乎无法在 2C 业务场景里面使用,只能通过其 REST API 自己写代码。