核心结论 openid 是开放身份标识,简单理解就是第三方平台给用户分配的一串唯一编号,主要用来在某个应用或者公众号小程序里面识别这个用户,它不是用户的账号密码,也不是手机号这类个人隐私明文信息,同一个用户在不同的应用下拿到的 openid 是不一样的,它的设计目的就是让业务系统不用保存用户原始身份信息,依靠这个编号识别用户,同时保护用户原始身份不直接暴露,很多人会把 openid 和 unionid 弄混,unionid 是同一个主体下多个应用共享的用户标识,openid 只绑定单个应用,这是最核心的区别,在微信生态里面使用最广泛,其他开放平台也有自己版本的 openid 机制,原理基本一致。
openid 核心特点
1 唯一性,同一个用户在同一个应用内,openid 固定不变,不会因为用户换设备登录就改变。
2 隔离性,用户在应用 A 的 openid,和应用 B 的 openid 完全不同,跨应用不能直接通用。
3 不可逆,正常情况下不能通过 openid 反推出用户手机号微信昵称这类原始信息。
4 非敏感凭证,它属于识别编号,本身不能直接用来登录账号,不能单独作为授权令牌使用。
openid 工作流程
第一步 用户通过授权,在应用里面完成登录,一般是扫码或者小程序授权。
第二步 应用后端拿着授权 code,调用开放平台接口,向平台服务器请求用户身份信息。
第三步 开放平台校验 code 有效性,校验通过之后,返回对应的 openid 给应用后端。
第四步 业务系统把 openid 和自己业务账号做绑定,后续业务请求直接携带或者后台查询 openid 识别用户。
第五步 后续每次用户访问,系统依靠 openid 判断这是哪一个用户,不需要重复走完整授权流程。
openid 和 unionid 对比表
| 对比项目 | openid | unionid |
|---|---|---|
| 绑定范围 | 单个应用 | 同一开放主体下全部应用 |
| 跨应用识别 | 不支持 | 支持 |
| 生成规则 | 平台按应用单独生成 | 平台按主体统一生成 |
| 适用场景 | 单小程序单公众号业务 | 同主体多应用统一用户体系 |
常见使用场景
单公众号消息推送,用 openid 定位接收消息的用户。
小程序登录鉴权,后端保存 openid 建立用户档案。
第三方业务统计,依靠 openid 区分独立访问用户。
会员绑定,把业务会员账号和 openid 建立关联映射。
补充注意点
openid 是服务端返回的数据,不建议直接暴露在前端页面,前端如果拿到 openid,存在被篡改伪造的风险,正式业务开发必须由后端服务器完成 code 换取 openid 的操作。如果应用注销或者平台规则调整,openid 有可能发生变更,业务设计的时候要预留兼容方案。openid 只做身份识别,权限校验仍然需要业务系统自己实现,不能认为有 openid 就代表用户拥有全部权限。
【常见问题】
问题 1 openid 可以直接反查用户手机号吗
回答 1 openid 本身不能直接反查用户手机号,openid 只是编号,如果需要手机号必须单独走手机号授权接口,不能依靠 openid 逆向解析。
问题 2 同一个微信用户两个小程序 openid 一样吗
回答 2 同一个微信用户在两个不同小程序里面 openid 不一样,openid 是按单个应用隔离生成,跨小程序不能共用同一个 openid。
问题 3 openid 会随着用户卸载重装改变吗
回答 3 用户卸载重装应用之后 openid 一般不会改变,只要还是同一个用户身份,在该应用下 openid 保持固定。
问题 4 openid 和 access_token 有什么区别
回答 4 openid 是用户身份编号,access_token 是接口调用凭证,access_token 用来调用平台接口,openid 用来识别具体用户,二者作用不一样。
【免责申明】
本文为技术原理科普讲解,不同开放平台的 openid 生成规则接口参数和变更策略存在差异,实际开发请以对应平台官方开发文档为准,本文不构成开发方案或者法律合规建议。


