企业微信接口鉴权不是加一个 Header 就结束。发送类接口一旦泄露,等于谁都能对客户群说话。这篇讲 Token、签名和环境怎么隔离。
鉴权要分开的三层
通道鉴权: 你们调企微二次开发 / 官方接口时用的密钥。只放服务端,不进前端、不进 App 包、不进前端仓库。
业务鉴权: 运营后台谁能创建发送任务。通道通了,不等于每个员工都能群发。按角色:运营改文案,管理员审名单,开发看日志。
回执鉴权: 对端 POST 到你的 URL 必须验签。不验签就会被伪造成功回执,任务全部变绿。
三套密钥不要共用。内部官方接口和外部群通道尤其不能同一对 token。
Token 怎么用
短过期 + 刷新,或请求级签名二选一,不要长期静态 token 写死在配置中心明文到处复制。
建议:
-
测试、预发、生产三套
-
轮换有窗口,双密钥短暂共存
-
泄露立刻作废并停该环境发送
Token 只在网关拼接。业务服务拿到的应是自己的会话,而不是通道万能钥。
签名建议签哪些字段
签名至少覆盖:时间戳、nonce、request_id、目标 ID。只签 body 哈希但目标在 URL 上,请求可能被改群仍通过。
时间戳超出窗口(如 5 分钟)直接拒绝,防重放。nonce 短时去重。
环境隔离是鉴权的一部分
测试 token 调不通生产。生产发送默认关闭,白名单或审核后才放行。测试群和生产群映射表分开,避免「鉴权过了但发到真客户群」。
内网也不要裸调发送。没有登录态的脚本能打发送接口,鉴权等于没做。
日志与泄露
鉴权失败要告警,但不在日志里打完整 token。操作者、实例、目标、request_id 留下,密钥只留后四位。
验收
-
错 token 全部失败
-
过期时间戳失败
-
改 target 后旧签名失败
-
测试密钥打生产被拒
-
伪造回执进不了成功态
小结
企业微信接口鉴权要同时管通道、后台和回执,并按环境隔离密钥。发送权比查询权严一个数量级。鉴权做完,还要把「谁能对哪些群发」写进业务权限,否则密钥对了,误发仍会发生。