找回密码
 立即注册

QQ登录

只需一步,快速开始

dino 活字格认证

高级会员

97

主题

556

帖子

1957

积分

高级会员

积分
1957

圣诞拼拼乐微信认证勋章活字格认证

dino 活字格认证
高级会员   /  发表于:2022-10-21 09:24  /   查看:5746  /  回复:11

一、前言
本着活字格分享快乐的原则,写此篇分享给有同样需求的格友,此为其一。其二就是记录一下实现过程,时间久了难免会忘记一些细节,方便今后维护。其三,很久很久未在论坛冒泡了,发一篇浅文刷一下存在。
实现的方式有很多种,也许这并非最好解决的方案,但是只要思路对了,实现起来还是比较容易。
所以运用活字格,脑洞比技术更重要。

二、背景:
目前有一套使用多年的活字格应用(以下简称A),采用的是内建用户模式。在移动侧使用的是企业微信,两者之间实现了扫码登录、发送企微消息、推送企微审批等能力,但是两者之间的用户却是独立的,很多需求没办法实现,特别是新上线的工作流,没法使内建用户和企微用户共用一套。
将工程A的普通认证模式切换为第三方用户认证模式是最简单的方案,但由于用户多、权限复杂等各种历史原因不能选择此方案,于是决定花点时间寻求其他方案来解决这个技术通道,否则后面很多需求都没法实现。

三、思路
通过在企微中运行活字格网页,获取企微用户id,再通过企微用户id与内建用户的关联,获取内建用户名,从而实现活字格在企微中通过内建用户自动登录。
思路好像没问题,但是如何获取企微用户id?如何关联企微用户与内建用户?内建用户又如何单点登录?有了想法就一步步解决。
1.新建中间过渡活字格应用(以下简称B),采用企微单点登录,用于获取企微用户id;
1.在企业微信中创建应用,应用运行活字格网页B;
2.通过页面获取企微用户id;
3.通过企微用户id匹配内建用户名;
4.通过内建用户名和单点登录密码获取用户token;
5.通过token实现内建用户单点登录应用A。
这个思路理论上可行。
这是梁老板帮我整理的思路图,葡萄城就从不缺灵魂画手
image.png885343932.png

四、实现
1.企微后台应用
创建企微自定义应用,获取;CorpID、Secret、AgentID,设置网页授权及JS-SDK、企微授权登录,应用主页暂未知可不设置。
这个在论坛中有很多教程,此处就不再赘述。

2.管理控制台准备工作:
上传企微安全提供程序,设置CorpID、Secret、AgentID,获取企微用户。这个教程在论坛中也有很多;
添加自定义属性qyWechatUnionID(以前实现企微扫码登录时已经创建),可以通过手工维护内建用户的企微用户id,也可以通过企微扫码登录绑定内建用户时自动更新。
后面会通过此字段获取内建用户名。
image.png518504943.png

3.用于获取企微用户id的活字格工程B:
新建活字格工程,使用第三方用户集成认证模式。
新建一个页面,添加登录用户控件,这页面单元格中输入%CurrentUser.UserName%,如果登录后,%CurrentUser.UserName%显示的就是企微用户id。
后面就会用此用户id获取内建用户名。
发布工程B。
image.png476479491.png

4.企微后台应用
活字格工程B页面的url设置为企微自定义应用的主页。
此时,在企业微信中访问自建应用,就能使用企微id实现单点登录,页面上的%CurrentUser.UserName%显示为当前用户的企微id。
接下来就要使用此企微用户id获取内建用户的用户名,当日要获取内建用户名,需要将此企微id传递到工程A中。
image.png638810729.png

5.内建用户活字格工程A
在工程A中,开启单点登录,设置单点登录密码123456;
在工程A中创建匿名页面P1(例如发布后为https://www.grapecity.com/p1),用于获取内建用户名;
在工程B中,设置页面加载命令,实现页面跳转到指定值,值为拼接的P1页面url+企微用户id参数,如https://www.grapecity.com/p1?username=eric),用于传递企微用户id到工程A;
在工程A的P1页面中,通过GETURLQUERYVALUE函数拿到工程B跳转过来的username参数值:eric;
image.png371038207.png
在工程A中创建用户信息视图,设置变量参数命令,通过得到的企微用户id:eric来获取内建用户名ericson;
通过发送http请求命令,设置地址:SSO/GetUserToken,参数userName=ericson,password=123456,获取变量token;
image.png638236693.png
将获取到的用户token拼接到url参数中,从而实现当前用户的单点登录任何工程A的页面,如https://www.grapecity.com/Homepage?token="&token
image.png895555724.png
此处网址可通过插件或js获取。
最终也是实现了从在企微中使用内建用户自动登录这一套骚操作,而且用户几乎无感。

五、坑
一号坑:企微创建应用网页授权及JS-SDk现在校验域名实名认证与企微实名认证需要同一企业或关联企业,以前是不需要的,还好我以前创建有一个应用,不需要再验证了。(此处建议带端口号,即便是默认的80或443端口)
image.png924650268.png
二号坑:企微创建应用设置的可见范围,即授权的第三方用户范围,如果在管理控制台第三方用户中没有找到所需的用户,检查这里的可见范围设置。
image.png217921752.png
三号坑:管理控制台需设置域名,此处须填写完整的应用网址,否则在企微单点登录时会报异常错误。(此处建议带端口号,即便是默认的80或443端口)
image.png609988097.png
四号坑:没了,兵马俑都没有四号坑。

六、遗留问题
企微单点登录有个问题,首次登录时,需点一下登录才能自动登录,这个好像在我4.0的时候实现企微单点登录时就存在。

七、鸣谢
在实现过程中,梁老板提供了可行的实现思路及高效的技术支持,非常感谢!同时感谢胡老板在二十大百忙期间的关照,谢谢二位老板鼎力支持,祝二位百年好合、永结同心!

评分

参与人数 2金币 +1000 满意度 +5 收起 理由
olookok + 5
Chelsey.Wang + 1000 赞一个!

查看全部评分

11 个回复

倒序浏览
dino活字格认证
高级会员   /  发表于:2022-10-24 16:12:38
推荐
dlxubo 发表于 2022-10-21 16:51
最好能上个demo就好了

整理了一下demo,已上传到沙发
回复 使用道具 举报
dino活字格认证
高级会员   /  发表于:2022-10-21 09:28:20
沙发
本帖最后由 dino 于 2022-10-24 16:11 编辑

demo

工程B.fgcc

82.17 KB, 下载次数: 426

工程A.fgcc

253.7 KB, 下载次数: 430

回复 使用道具 举报
siwicloud
中级会员   /  发表于:2022-10-21 09:42:38
板凳
ding
回复 使用道具 举报
hubei333
高级会员   /  发表于:2022-10-21 16:44:52
地板
好帖!!学习了!感谢楼主无私的奉献!
回复 使用道具 举报
dlxubo
银牌会员   /  发表于:2022-10-21 16:51:59
5#
最好能上个demo就好了
回复 使用道具 举报
guoqp
银牌会员   /  发表于:2022-10-21 22:34:57
6#
自动登录的问题已经在我的分享贴里帮你解决了
回复 使用道具 举报
dino活字格认证
高级会员   /  发表于:2022-10-22 16:55:28
7#
guoqp 发表于 2022-10-21 22:34
自动登录的问题已经在我的分享贴里帮你解决了

感谢大佬,我去学习一下
回复 使用道具 举报
olookok活字格认证
论坛元老   /  发表于:2022-10-23 08:38:42
8#
这个要顶一顶
回复 使用道具 举报
137294886
金牌服务用户   /  发表于:2022-10-23 13:37:52
9#
最好能上个demo就好了
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部