Appearance
写作背景
公司使用的办公软件是企业微信,想要将一些内部内容整合到企业微信中,适配企业微信的架构,这样可以直接从企业微信进入并验证身份。博主在进行开发时遇到了一些困难,最后也得到了一些收获分享给大家。
在企业微信中添加应用
- 管理员进入企业微信后台登录 企业微信后台链接(opens new window)
- 点击企业应用--自建应用--创建应用
- 添加应用 logo 和填写应用名字,logo 一般用 150*150 的
- 这样在企业微信工作台就可以看到应用了
注意添加应用后需要配置可信域名,我们配置的应用首页必须位于该域名下,具体规则如下所示:
前端实现接入
企业微信官方文档如图所示:
简单来说就是:
- 构造 OAuth2 链接引导用户到企微服务授权页,可选择静默授权或手动授权(手动授权可获取成员的详细信息,包含头像、二维码等敏感信息)。
- 用户返回回调地址,使用企业微信提供的 code 与 state 调用服务端接口,接口返回 token 用来定义用户登录状态。
- 使用 token 请求服务端接口,获取数据。
但是企微提供的文档并不清晰,很容易误导开发者将构造的 OAuth2 链接配置到应用首页,这样很容易导致获取用户信息的 code 泄露,并且此应用将可以在外部浏览器中打开。所以建议将第一步放在前端代码中实现,以防止可能造成的安全问题,并且可以使用户配置的应用首页就是具体网页地址,而不用将构造链接放到首页。关键代码:
通过上述代码可以获取企微反回的 code, 但是根据企业微信文档建议我们消费 code 用以获取数据,但是这样需要我们每次刷新页面都需要重新获取 code,实际上并没有做到传统意义上的登录,只是每次使用 code 交换数据,所以博主建议在这里可以使用 code 从服务端交换一个自定义的 token,从而帮助实现登陆状态。关键代码如下:
处理代码可以放在 callback 页面,完成处理后再重定向到源页面,从而实现用户无感登录。
企业微信客户端 web 页面调试
window 系统:
jsctrl + alt + shift + d;
mac 系统
jscommand + control + shift + d;