企业微信网页授权登录方案简述
1.前置项
yaml
企业微信应用创建:
- 获取企业微信ID(即企业微信的公司ID)
- 企业微信应用ID(应用详情页可查看)
- 企业微信应用密钥(应用密钥,应用详情页应用管理员可查看)2.流程简述
properties
官方文档链接: https://developer.work.weixin.qq.com/document/path/91335前端发起授权-用户同意授权-后端获取用户信息-后端对比用户信息,如存在则登录
2.1 发起授权
2.1.1 前端页面
properties
拉起授权链接:https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_privateinfo&state=STATE&agentid=AGENTID#wechat_redirect
#注意有几个占位符参数需根据具体的企业微信应用替换
CORPID:企业微信公司ID
REDIRECT_URI:企业微信用户同意授权后,应跳转至业务系统的具体链接,需要encode编码(如encodeURIComponent)
AGENTID:应用ID
STATE:可以自定义的一个参数标记,授权后会原样将该参数传回业务系统javascript
//javascript
let WorkWxSSOURI:'https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_privateinfo&state=STATE&agentid=AGENTID#wechat_redirect';
let url = this.WorkWxSSOURI.replace('CORPID',this.CORPID).replace('REDIRECT_URI',encodeURIComponent(this.redirectUri)).replace('AGENTID',this.AgentId).replace("STATE",this.state)
window.location.href = url;2.1.2 后端接口
获取企业微信的token
properties
获取token:https://qyapi.weixin.qq.com/cgi-bin/gettoken
官方文档链接:https://developer.work.weixin.qq.com/document/path/91039#15074获取【获取访问用户敏感信息】的ticket
properties
获取ticket:https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token=ACCESS_TOKEN&code=CODE
#注意有几个占位符参数
ACCESS_TOKEN:企业微信的token,上一步骤中获取到的
CODE:用户同意授权后,企业微信回调到本系统的REDIRECT_URI会拼接一个参数code,此处替换为code的参数值获取访问用户敏感信息
properties
获取用户信息:https://qyapi.weixin.qq.com/cgi-bin/auth/getuserdetail?access_token=ACCESS_TOKEN
官方文档链接:https://developer.work.weixin.qq.com/document/path/95833
#POST调用,上一步获取的ticket放在body中,ACCESS_TOKEN就是第一步的token2.2 登录
获取到的用户敏感信息中包含企业微信用户的手机号及邮箱等其他信息,
可根据相关信息与业务系统内用户信息做比对校验,
如存在,则执行系统内相关用户登录逻辑
3.应用配置项
3.1应用入口链接配置
properties
#解释
网页地址:由于企业微信授权登录页面和逻辑是独有的,前端有单独的页面,所以需要用户点击进入的页面可以拉起网页授权,如果应用不是80/443的端口,要声明具体的端口
在微信插件中始终进入主页:实际作用可以理解为每次点进应用都要进入授权拉起的页面,以及用户每次点进去登录后看到的页面是固定的,根据实际业务需求勾选或不勾选都可以
# 小程序或手机与电脑端分开配置等,要自行尝试一下了,没有业务场景经历3.2 可信域名配置
properties
#解释
可信域名是企业微信的安全策略,只有设置为可信域名的才能使用企业微信的相关网页调用;且每个应用独立设置,互不干涉
可信域名与上述的REDIRECT_URI地址所属域名和端口要保持一致;
设置或变更可信域名需要做校验,确保是域名所有者或者域名管理者做的变更,防止域名被非法利用;所以需要下载企业微信生成的txt文件放置在域名的根目录下,nginx,tomcat或其他web容器,自行放置,保证可以通过下边的链接访问到txt文件内容即可3.3 授权回调域名
properties
授权回调域:与上述可信域名相同即可3.4 企业可信IP
properties
#解释
企业微信安全策略,只允许有限的IP访问调用(也因此获取token和获取用户的信息等接口只能后端调用)
IP地址为后端服务器访问外网的出口IP;机房服务器可能会有多个出口IP,为了保证稳定性,建议是都写上
#注:后端服务器一定要能访问到企业微信的api,也就是一定要能访问qyapi.weixin.qq.com域名;机房或服务器安全组等策略如果限制了要注意做调整