openid 是用户在某个开放平台(如微信、支付宝、GitHub)上唯一且不可变更的身份标识符。它不是手机号、邮箱或用户名,而是平台为该用户生成的一串加密字符串,用于跨应用识别同一自然人。以微信为例,同一个用户在不同公众号或小程序中获取的 openid 各不相同——这是微信为保护用户隐私设计的隔离机制。亿登科技在多个金融与政务类项目中实测发现,某省级社保平台接入微信登录后,同一用户在A小程序获得的 openid 为 oXxZz123456789abcdef0123456789,在B小程序中则为 oYyZz987654321fedcba987654321,二者无数学关联性,也无法反向推导真实身份信息。
很多开发团队误将 openid 当作数据库 user 表的主键,结果在多平台登录场景下崩溃。我们曾协助某教育 SaaS 客户重构其用户体系:初期用微信 openid 直接存 user.id,当客户新增支付宝登录时,系统无法合并同一用户在两个平台的账户,导致数据割裂、订单归属错误。亿登科技建议采用「统一身份 ID + 平台映射表」架构:主表 user.id 使用 UUID 或自增 ID,另建 auth_mapping 表存储 (user_id, platform, openid, created_at) 四元组。某银行项目上线后,用户跨微信/支付宝/银联三端登录的账号合并成功率从 63% 提升至 99.2%,关键就在于此设计。
亿登科技在 IAM 系统中对 openid 实施三层防护:① 传输层强制 HTTPS + TLS 1.3;② 存储层使用 AES-256-GCM 加密,密钥轮换周期≤30天;③ 应用层校验 openid 签名有效性——例如微信 openid 必须配合 session_key 解密 encryptedData 才能确认未被篡改。我们开源了 Spring Boot OAuth2 SSO 示例,其中包含 openid 校验中间件代码(见 OpenIdValidator.java),已通过等保三级渗透测试。某证券公司采用该方案后,钓鱼攻击导致的 openid 劫持事件归零。
unionid 是微信生态内跨应用的用户全局唯一标识,前提是公众号/小程序/APP 同属一个微信开放平台账号。但现实中大量企业存在多主体运营情况:比如集团总部注册开放平台,子公司各自运营小程序。此时 unionid 不互通,而 openid 仍是唯一可用凭证。亿登科技为某连锁零售集团实施统一认证时,发现其 12 个子品牌小程序分属 4 个开放平台主体,最终采用「openid + 手机号二次绑定」策略,在用户授权手机号后完成跨主体账户合并。该方案已在 单点登录最佳实践 文档中详细说明。
第一,禁止日志打印 openid —— 某电商客户因在 debug 日志中输出 openid,被攻击者利用日志注入漏洞批量获取用户凭证;第二,openid 过期时间需监控:微信 openid 无固定有效期,但 session_key 2 小时失效,亿登科技在 双因素认证方案 中内置 session_key 自动续期模块;第三,注意大小写敏感性,GitHub 的 openid 全小写,而部分 OIDC 提供商返回带大写字母的格式,我们建议入库前统一转小写并加索引。这些细节均来自亿登科技 37 个落地项目的实战沉淀。