微信网页授权token刷新和缓存问题

业务场景:
目前有一个微信公众号,里面有好几个菜单,点击菜单的时候会跳转到业务页面,业务页面会去通过网页获取accesstoken的方式获取用户信息。

我们知道,微信提供了标准的oauth2.0的规范来让我们获取微信的用户信息:
业务系统------>微信oauth------用户授权带上code跳转----->业务系统---->解析code------>通过code获取accesstoken------------>通过accesstoken获取用户信息。
那么以上是我通过简单的文字描述的流程。
在获取到accesstoken的时候,它的返回值(官方列子)是这样的:

{
   "access_token":"ACCESS_TOKEN",
   "expires_in":7200,
   "refresh_token":"REFRESH_TOKEN",
   "openid":"OPENID",
   "scope":"SCOPE"
}

access_token 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
expires_in access_token接口调用凭证超时时间,单位(秒)
refresh_token 用户刷新access_token
openid 用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID
scope 用户授权的作用域,使用逗号(,)分隔

我们可以看到有openId,有token和refresh_token,token的默认有效时间是两个小时,当过了这个时间以后需要通过refresh_token去刷新,如果refresh_token过期了,就需要重新授权。
那么问题来了:
1.我每次通过菜单点击用业务页面的时候都是无状态的,不知道当前是哪个用户点击的菜单
2.所以在这种情况下面,就算我缓存了accesstoken,也没办法就缓冲中拿去(因为token是和用户相关的)只能每次都跳转授权接口,重新走一遍accesstoken的获取流程

请问各位有什么办法,或者我忽略了什么

阅读 23.5k
5 个回答

用 redis,键名可以用类似 userid:123456:token,缓存时间两小时,过期则重新授权。

这个应该只是为了你有某种需求,需要更新用户的数据,才出现的刷新机制。比如说要更新用户头像,归属地等。 一点见解

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进