公众号网页授权没有出现确认页,不等于流程没有执行。是否展示交互页面,与授权范围、用户此前的状态和平台条件有关;应检查实际回调与返回字段,不能仅凭“手机没有弹窗”判断成功或失败。

旧项目中的观察

2018 年开发时,手机进入页面没有出现预期的授权确认,而调试工具的表现不同。旧记录将这种差异与用户已经关注公众号联系起来。这个经历可以保留,但不能据此承诺“关注之后,所有范围都能静默获取全部信息”。

把流程按数据分开

公众号网页授权的基本关系可以表示为:

业务页面发起授权
  → 授权入口携带 appid、redirect_uri、scope、state
  → 回调携带 code 与 state
  → 服务端校验 state,并用 code 换取相应授权结果
  → 按授权范围处理身份与后续资料请求

code 是流程中的临时凭证,不应放到日志长期保存或重复使用。AppSecret 属于服务端配置,不应出现在页面源码和前端请求脚本中。公众号网页授权文档入口

旧流程中的 snsapi_base 用于基础身份,snsapi_userinfo 对应另一授权范围。不能把 scope 名字当成“永久取得全部用户资料”的保证;可用字段及交互条件应以实际账号能力和当前平台规则为准。

两种 access_token 不要混用

凭证所属流程
公众号基础接口 access_token服务端调用公众号相应基础接口
网页授权 access_token以授权 code 换取、用于相应用户授权流程
配置服务器时的 Token回调签名校验中的约定值

名字相似不意味着可以互换。旧稿提到的 /cgi-bin/token 与 /sns/oauth2/access_token 就属于不同用途,调用前应确认接口要求的是哪一种凭证。

openid 也有应用上下文,不是所有公众号、小程序和开放平台应用都共用的全球用户编号。关联账号应使用平台允许的身份机制,不能通过字符串“反推”用户。

成功应从回调和权限判断

检查 state 与发起会话是否匹配,拒绝过期或重复使用的流程;再按实际返回识别当前用户,并保持业务登录、资源权限与授权结果的边界。

如果首先遇到域名或 AppID 错误,先处理授权参数与域名不一致。当次授权能够跳回页面,也不代表接口凭证、用户资料及业务权限可以省略各自验证。