logo
0
1
Login

cnb 企业微信登陆对接

简介

通过企业微信提供的登录能力,可以让 CNB(CloudNativeBuild) 在浏览器内打开时,引导成员使用企业微信登录授权,从而获取成员的身份信息

在进行企业微信授权登录之前,需要先在企业的管理端后台创建一个具备“企业微信授权登录”能力的应用(见“开启网页授权登录”)。

企业微信配置

开启网页授权登录

登录 企业管理端后台->进入需要开启的自建应用->点击 “企业微信授权登录”(见“开启网页授权登录”)

然后点击 "设置授权回调域",输入回调域名,点击“保存”。

可信域名配置

因回调用地址域名必须是可信域名,且仅所配可信IP可通过接口获取企业数据

用户需提前将 CNB(CloudNativeBuild) 所使用的域名配置到可信域名当中,并为调用接口获取企业数据的服务配置可信IP白名单

参考资料:

自建应用服务

企业微信登里需要通过自建应用服务,将登陆授权码换取登陆用户信息

当前仓库是一个自建应用服务的执行例子,用户可以参考 cnb-wecom 的逻辑,自行开发企业自建应用

准备完成后,可以在可信IP服务上,部署自建应用服务

改自建应用服务,需要实现 /userinfo 接口,接收 client_id/client_secret/code 返回登陆用户信息

按顺序调用以下三个接口,完成用户登陆操作

  1. /cgi-bin/gettoken 通过 corpid 和 corpsecret 换取 access_token
  2. /cgi-bin/auth/getuserinfo 通过 access_token 和 code 换取 userid
  3. /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

用户信息请求示例

https://${domain}/userinfo

返回结构

{ "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 管理端登陆配置

登陆 CNB 运营管理平台,配置Oauth登陆信息

访问http://[admin domain]/system/setting/platform-auth/oauth

字段内容
Client ID企业ID,可到企业微信管理页面,我的企业 -> 企业信息获得
Client Secret自建应用 Secret,可在自建应用详情页获得
Scopesnsapi_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. 允许自定义邮箱

验证

  1. 配置完成后,访问 CNB 主站,点击登陆,确认是否会跳转到企业微信登陆地址,如果没有,则检查前一步授权地址是否配置正确
  2. 企业微信地址登陆完成后,会传递登陆授权码回到主站,并发起授权码消费接口,换取登陆用户信息,如果这一步失败,可以检查前一步用户信息请求是否配置正确,或者查看自建应用请求日志
  3. 如果自建应用没有收到请求,或者收到请求换取用户信息成功后,没有成功登陆进入用户主页,请联系 CNB 管理员定位具体问题原因

About

通过企业微信提供的登录能力,可以让 CNB(CloudNativeBuild) 在浏览器内打开时,引导成员使用企业微信登录授权,从而获取成员的身份信息

企业微信OauthCNB
Language
Go69.3%
Markdown20.3%
Dockerfile9.8%
gitignore0.6%