https://developers.weixin.qq.com/doc/oplatform/developers/dev/auth/h5.html
有如下场景:A用户微信内授权H5网页获取用户信息的权限,最终获取到用户的unionId。但是现在发现出现了授权A用户,最终一套流程执行完后得到的是B用户的unionId.
大致流出如下:
网页应用授权登录code:001*******F2H5
appID:wx*******3a
调用了接口https://api.weixin.qq.com/sns/oauth2/component/access_token
获取到的accessToken: 99_*******NIXxECoM
accessToken 对应的是B用户unionId:ofmZW6******Eu6Ws
预期应该是 A用户的信息unionId:ofmZW6*****0zoVp5-9s
希望官方老师们能协助我定位一下具体原因。

服务器日志分析:收到的code:001wF2Ha1lGRRK08sPFa1r1LQS3wF2H5,用此code请求微信接口:/sns/oauth2/component/access_token,微信返回的unionId:ofmZW6yaO2n-OMUdQdKxPOvEu6Ws,这三个信息是可以匹配上的吗?还是 请求的code和收到的code不一致,这个收到的code指的是哪里的code呢?
通常是由于授权状态混淆或服务器端缓存污染导致的。根据你提供的流程和微信OAuth文档,问题很可能出在以下几个环节
这是最可能出问题的环节,因为
code是在这里生成的。state参数。该参数用于防止CSRF攻击,并在回调时匹配用户会话。如果state缺失、固定不变或在多个用户间复用,可能导致回调会话错乱。appId是否正确无误。2. 服务器端处理环节 (核心排查点)
服务器是处理
code换取access_token和unionid的地方,这里出现缓存错误是常见原因。/sns/oauth2/component/access_token接口后,是否将返回的access_token和unionid缓存起来了?如果缓存键(Cache Key)设计不当(例如,仅以appid为键),那么用户B的登录信息可能会覆盖用户A的,导致后续所有请求都返回B的数据。code本身、或与前端state参数关联的会话ID。每个用户的code都是一次性且唯一的,非常适合用作缓存键的一部分。/component/access_token)。请确认请求中的component_appid和component_access_token是正确且最新的。这些凭证如果与错误的授权方应用绑定,也可能导致数据错乱。3. 微信开放平台配置
作为基础检查,请登录微信开放平台,确认:
wx*******3a)的授权域名配置正确。