通过企业微信提供的登录能力,可以让 CNB(CloudNativeBuild) 在浏览器内打开时,引导成员使用企业微信登录授权,从而获取成员的身份信息
在进行企业微信授权登录之前,需要先在企业的管理端后台创建一个具备“企业微信授权登录”能力的应用(见“开启网页授权登录”)。
登录 企业管理端后台->进入需要开启的自建应用->点击 “企业微信授权登录”(见“开启网页授权登录”)
然后点击 "设置授权回调域",输入回调域名,点击“保存”。
因回调用地址域名必须是可信域名,且仅所配可信IP可通过接口获取企业数据
用户需提前将 CNB(CloudNativeBuild) 所使用的域名配置到可信域名当中,并为调用接口获取企业数据的服务配置可信IP白名单
参考资料:
企业微信登里需要通过自建应用服务,将登陆授权码换取登陆用户信息
当前仓库是一个自建应用服务的执行例子,用户可以参考 cnb-wecom 的逻辑,自行开发企业自建应用
准备完成后,可以在可信IP服务上,部署自建应用服务
改自建应用服务,需要实现 /userinfo 接口,接收 client_id/client_secret/code 返回登陆用户信息
按顺序调用以下三个接口,完成用户登陆操作
/cgi-bin/gettoken 通过 corpid 和 corpsecret 换取 access_token/cgi-bin/auth/getuserinfo 通过 access_token 和 code 换取 userid/cgi-bin/user/get 通过 access_token 和 userid 换取 user 信息启动自建应用服务
# e.g. 使用 Docker 启动
# 设置开机启动 Docker 服务
systemctl enable docker
# 启动 Docker 服务
systemctl start docker
# 启动 cnb-wecom 服务
docker run -d --restart=always -p 80:80 \
--name cnb-wecom \
docker.cnb.cool/cnb/self-host/oauth/wecom:latest
# 调试模式
docker run -d --restart=always -p 80:80 \
--name cnb-wecom -e debug=1 \
docker.cnb.cool/cnb/self-host/oauth/wecom:latest
# k8s 部署
kubectl apply -f ./kubernetes
对应访问地址为: `oauth-wecom.{{ .Namespace }}.svc.cluster.local:80`, e.g. oauth-wecom.default.svc.cluster.local:80
返回结构
{
"errcode": 0,
"errmsg": "ok",
"userid": "zhangsan",
"name": "张三",
"department": [1, 2],
"position": "产品经理",
"mobile": "13800000000",
"gender": "1",
"email": "zhangsan@gzdev.com",
"avatar": "http://wx.qlogo.cn/mmopen/ajNVdqHZLLA3WJ6DSZUfiakYe37PKnQhBIeOQBO4czqrnZDS79FH5Wm5m4X69TBicnHFlhiafvDwklOpZeXYQQ2icg/0",
"status": 1,
"extattr": {
"attrs": [
{
"name": "爱好",
"value": "旅游"
},
{
"name": "卡号",
"value": "1234567890"
}
]
}
}
通过热更新模式启动
go run main.go --signal SIGTERM
系统登陆时,可以通过自建应用中转,先跳转到自建应用,然后再到企业微信登陆,用户可以修改该中转页,满足网站定制化的需求,参考 Web登录组件 该模式下需要配置自建应用服务地址,和原应用登陆信息
docker run -d --restart=always -p 80:80 \
--name cnb-wecom \
# 中转登陆页协议
-e APP_PROTOCOL=http \
# 中转登陆页域名
-e APP_DOMAIN=oauth.example.com \
# 源应用协议,即 cnb 平台协议
-e APP_SOURCE_PROTOCOL=http \
# 源应用域名,即 cnb 平台域名
-e APP_SOURCE_DOMAIN=cnb.example.com \
docker.cnb.cool/cnb/self-host/oauth/wecom:latest
同时,CNB 管理端对应的授权请求和用户信息请求url修改为,替换 app_protocol 和 app_domain 为自建应用服务地址:
| 字段 | 内容 |
|---|---|
| 授权请求 | [app_protocol]://[app_domain]/oauth/authorize?login_type=CorpApp&appid=${client_id}&agentid=AGENTID,AGENTID 替换为自己应用AgentId |
| Token 请求 | 不填 |
| 用户信息请求 | [app_protocol]://[domain]/userinfo?client_id=${client_id}&client_secret=${client_secret}&code=${code} |
登陆 CNB 运营管理平台,配置Oauth登陆信息
访问http://[admin domain]/system/setting/platform-auth/oauth
| 字段 | 内容 |
|---|---|
| Client ID | 企业ID,可到企业微信管理页面,我的企业 -> 企业信息获得 |
| Client Secret | 自建应用 Secret,可在自建应用详情页获得 |
| Scope | snsapi_base |
| 授权方式 | 自动检测 |
| 授权请求 | https://login.work.weixin.qq.com/wwlogin/sso/login?login_type=CorpApp&appid=${client_id}&agentid=AGENTID,AGENTID 替换为自己应用AgentId,其他不变 |
| Token 请求 | 不填 |
| 用户信息请求 | http://[domain]/userinfo?client_id=${client_id}&client_secret=${client_secret}&code=${code}, [domain]替换为自建应用服务地址,其他直接全文复制,不要修改 |
| 同步登出地址 | 不填 |
| 用户 id 映射属性 | userid |
| 用户名映射属性 | userid |
| 用户昵称映射属性 | name |
| 用户邮箱映射属性 | 不填 |
| 用户头像映射属性 | avatar |
| 提示消息映射属性 | errmsg |
| 同步权限设置 | 按需选择,e.g. 允许自定义邮箱 |