覃雷
摘 要:在部署企业对内支撑系统时,为充分利用互联网的便捷性及微信庞大用户群优势,很多企业已经把面向公众销售业务产品服务的商城系统部署到微信公众号上。事实上微信生态允许我们在延续这种便捷性优势的前提下实现企业对内支撑系统的快速部署。本文基于企业微信的微工作台针对企业内部非敏感性支撑系统的建设与部署提出自己的解决方案。
关键词:微信 企业微信 支撑系统 安全建设
中图分类号:TP39 文献标识码:A 文章编号:1674-098X(2019)10(a)-0129-02
在互联网上部署企业对内支撑系统时,业务数据安全性及员工接入的便捷性是两个重要的关切点。当业务数据比较敏感时很多企业都采用了自建VPN接入的方式,企业自建的VPN涉及防火墙等安全防护的投入[1],整体部署成本较高。对一些敏感性不高的业务系统,很多企业采用了直接在互联网上部署的方式,这种方式意味所有互联网用户都可以看到系统;同时员工需要记下各系统的账号密码并在每次登陆时输入,既增加了系统安全风险,也不方便员工使用。
本文主要研究解决以下问题来实现非敏感性对内支撑系统相对更安全更便捷的建設与部署方案:如何用企业微信部署企业对内支撑系统实现互联网访问渠道的有效控制;如何实现企业微信与公众号粉丝数据的关联,进而实现公众号上的业务数据与企业微信上的内部支撑系统数据关联。本文涉及本地实验环境如表1所示。
1 在企业微信微工作台中部署对内支撑系统
1.1 为接入的支撑系统创建单独的应用并配置接入参数
在我们部署成功后,微信用户可以同时通过微工作台或企业微信APP来登陆所部署的支撑系统,虽然腾讯一直在引导用户转向企业微信APP,但本方案仍推荐微工作台方式,企业微信的API接口已对微工作台做兼容处理,所以对要接入的支撑系统来讲,接入方式和代码是完全一致的。微工作台的优势是让员工可以直接用微信而不需再安装一个新的APP来登陆。
企业管理员登陆企业微信后台后,在应用管理页面的自建区可以为要部署的各支撑系统单独创建应用,每个创建成功的应用都将获得自己的Secret及应用的单独参数配置页面。我们需要进入应用参数配置页面中启用“网页授权及JS-SDK”(把企业支撑系统的访问域名填入即可),同时还需进入“消息接收”选项中启用API接收(配置接收消息的URL)。
1.2 支撑系统登陆代码改造为“从企业微信微平台接入并通过OAuth2.0鉴权登陆”
将企业支撑系统接入企业微信实际上仅需对原支撑系统的登陆代码做一定改造优化,即把原登陆代码中“核对用户登陆名密码并登陆”部分改造为“微信OAuth2.0鉴权并登陆”,处理逻辑详见图1。
虽然企业微信应用接入access_token有效期一般是2h[2],但接入微信服务端的API频次是有限制的[3]。所以为保障接入正常上图2中的第4、5步骤我们完成可以把新获取到的access_token先保存到本地数据库,后续应用需使用时先从本地数据库读取,如本地过期则重新刷新并保存。这样可以实现应用内并发的多个接入点共享重复使用access_token。
1.3 创建微信消息接收与响应处理页
企业支撑系统与微信做数据交互时,微信服务器的所有响应信息全部推送到接收消息URL(即上文“消息接收”选项中配置的URL)。微信交互的消息处理及员工的登陆日志,我们可以在此“消息接收”页面程序中实现。
2 企业支撑系统登陆帐号的对接同步与维护
2.1 规范企业微信登陆帐号
因为登陆鉴权入口由企业微信控制,所以企业微信的成员就是最好的支撑系统登陆帐号,维护企业微信的通讯录即是企业支撑系统登陆帐号,而员工登陆后的业务权限则由支撑系统在后台代码中另外控制即可。
企业微信成员支持两种加入方式,方式一:管理员预先在企业微信后台批量导入成员帐号清单做预授权,成员通过微信(扫码或搜索企业名称)关注微工作台即可完成加入流程;方式二:成员从微信(扫码或搜索企业名称)关注微工作台(关注后审核之前看不到任何信息,相当于申请),然后管理员从企业微信的后台进行审核。无论是哪种加入方式,企业微信的管理员都可以对成员的帐号进行编辑定制,这一点我们后面的同步管理非常有利。本方案推荐员工统一以自己手机号作为成员帐号(默认是微信号,所以管理员需要做出规范要求)。
2.2 创建同步服务,定时从微信API服务器同步企业微信通讯录数据
尽管通过消息接收API,支撑系统后台可以获得微信服务器推送的成员关注、取关消息,但互联网网络异常情况时有发生,而微信服务器并不会因前期异常而重新下发用户消息。所以建立一个主动与微信服务器同步企业微信通讯录的服务是很必要的。因为同步作业可以完全不需人工交互,所以创建一个服务来实现比较合适。企业微信的通讯录同步可以分为部门同步和部门成员同步。为方便管理,部门及成员的表结构可以完全按微信服务端的结构建立。同步时先同步部门再同步成员,代码示例见图2。
同步的处理策略:(1)每天定时拉取最新成员列表通过userid与本地库进行比对;(2)最新成员列表没有但本地库存在的表示已取消关注;(3)最新成员列表有但本地库没有的则是新增成员,对新增成员进一步向微信接口获取完整用户信息后保存到到本地数据库;(4)当企业员工较多时,可能涉及长时间占用本地计算资源来做写入操作,这种情况下建议选择非业务高峰时段进行同步作业。需要特别说明的是,因为企业微信通讯录只影响登陆而不涉及业务权限管控,所以在同步通讯录时对新加入的成员要做好默认业务权限的配置。
2.3 可将企业微信成员与公众号粉丝关联,实现微信生态内部分业务场景的协同
对已在微信公众号上建立了商城的企业,在运营中会有很多需要把企业员工与粉丝进行关联的业务场景,比如:(1)为提高公众号粉丝规模,公众号运营团队有时需要对粉丝进行细分并划归不同员工负责;(2)商城销售订单采用促销人激励机制,社会促销人员的发展需要发动员工进行组织和发展。由于我们已规定用员工手机号作为企业微信的成员帐号(即userid为手机号),要支撑上述场景只需引导过公众号粉丝绑定手机号(这本身即是业务销售的必要信息),然后与企业微信成员userid进行关联即可。因为涉及公众号粉丝维护,所以又要求我们对公众号的粉丝也要进行同步,公众号同步的策略与上文的企业微信通讯录同步类似,在此略过。
3 结语
接入企业微信进行部署后,通过OAuth2.0鉴权企业员工用自己微信就可以直接登陆企业内部支撑系统,员工的微信号即相当于支撑系统的登陆工号;哪些工号可以登陆由企业微信的通讯录控制,登陆后的具体的业务权限由支撑系统自己管控;与此同时,支撑系统将对不通过企业微信的接入全部进行屏蔽。这些措施将帮助原来完全暴露在互联网的企业支撑系统有效控制访问接入的渠道,显著提升支撑系统的安全性。此外,对已经把网上商城部署到微信公众号的企业,当一些特殊业务场景需要做系统间的数据关联或协同操作时,由于同样基于微信生态这类支撑将变得更简单快捷。
参考文献
[1] 成松.企业网VPN接入方案设计与实施[D].南京:南京邮电大学,2016.
[2] 企业微信服务端API.https://work.weixin.qq.com/api/doc#90000/90135/91039.
[3] 访问频率限制.https://work.weixin.qq.com/api/doc#90000/90139/90312.