微信开发中的疑惑。关于access_token
最近接手一个微信项目。已经开发到一半了。
发现一些疑惑。
1、我们db中有个专门存放微信用户信息的表,最后竟然有两个字段,一个是access_token和jsapi的字段。
我了解到的是access_token是针对于微信公众号的密匙。并非针对每个登陆公众号的用户生成的。jsapi也是使用jssdk才会根据access_token去生成。
另外还了解到微信貌似会限制每天去取access_token。好像2K,跟项目负责人沟通,他的意思是access_token是每个用户不同。生成的,存下来,设置个时效。
不太懂,特来问问大家。~~~~
暂时这么多,谢啦~今天天气不错,大家都有个好心情~
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
在oauth中也有个access_token,这个确实是每个openid都不同
网页授权access_token
一共有两个accesstoken 一个是系统级很多接口都要用的。另外一个是获取用户信息用的accesstoken,每个用户的都不一样。你上面所说的就是获取用户信息的accesstoken。因为这个token有请求次数上限的限制,所以要存起来,而且还要存token的有效期和一个可以获取新token的一个freshtoken。这就是要存起来的原因。
有两种access_token,看你提到jsapi那就应该是oauth用的了,那个是根据授权用户不同的,好像也没啥限制,自己会过期,这个我没有缓存
公众号的access_token每天是有设置调用次数的,每次拿到access_token之后应该存起来。access_token的有效时长是两个小时。每个用户在进入公众号之后会产出一个openid这个openid是用户的身份凭证(这个openid在某个公众号是唯一的,且是不变的)。
微信采用的是Oauth认证,对于这种认证方式,有四种模式:
授权码模式(authorization code)
简化模式(implicit)
密码模式(resource owner password credentials)
客户端模式(client credentials)
首先第三方客户端(也就是你们的开发项目)需要在微信开放平台进行注册,然后会获取到一个clientId 和clientSecret
然后你提到的两种情况对应如下:
客户端模式(client credentials),不需要微信用户授权,只要第三方客户端向微信的认证api发送clientId 和clientSecret,就可以获取到一个access_token,此时这个access_token是跟第三方客户端绑定的,可以获取微信的公共信息。
授权码模式or简化模式:
这种认证方式在发送了clientId 和clientSecret后,会跳转到用户的授权界面(需要用户登录并授权),授权后会跳转到第三方客户端在微信开放平台注册时填写的redirect_url(通常为第三方客户端的服务器),并返回一个授权码code(简化模式直接返回access_token),然后第三方使用这个code去获取access_token,此时的access_token是对应特定微信用户的。授权码code的有效时间非常短,一般为30秒,而授权码模式也是公认四种认证模式中最安全的。
看你的描述,你们应该是授权码的认证模式,然后根据用户在授权页面做的选择,access_token对应不同的api。比如用户授权时勾选了可访问联系人,就只能访问获取联系人的api,这跟单个用户选择匹配的。另:每个access_token在微信平台的数据库中是已经包含用户id,所以你们不用存储用户信息,access_token已经包含了。
所有的access_token都有有效期,需要定时刷新,一般第三方开发都有一个用于定时刷新access_tken和发放的服务。
第一次发言,不知道我讲明白了……
声望不够不能点赞,@codeofshield 说的是对的。
微信开发时会遇到两个accessToken,一个是微信公众号接口调用的授权凭证,也就是每次调用微信公众平台其他接口所需要的接口凭证,详见链接描述。因为微信公众平台对每个注册应用都有这个accessToken刷新次数上限(目前是2000次/天),并且多台服务器同时利用accessToken调用微信接口时,必须保证accessToken都是最新更新的那个。所以这个accessToken是需要我们的服务器进行保存并定时去更新的(有效期两小时),至于具体是保存在数据库还是服务器缓存中就要看业务需要了。 如上,这个accessToken是一个平台与一个app之间对应并保持实时唯一的。
另外一个accessToken是微信用户授权我们应用时提供给我们的,这个token是某一个用户与某一个app之间对应保持实时唯一的,主要用来我们获取用户资源时校验权限的,这个没有次数限制,可以不做保存。但是如果需要频繁获取用户信息的话,建议也可以在微信用户授权你们应用时,触发定时器去实时更新,毕竟这样也确实能够节省很大的网络开销。详见链接描述