收藏
回答

BUG,不同请求返回校验值相同

问题模块 API/组件名称 终端类型 微信版本 基础库版本
API和组件 wx.getUserInfo 工具 开发者工具 1.7.2

使用wx.login接口获取code,获取到的code不同,是否应该对应不同的session_key?

如果是的话,根据签名算法,应该返回不同的签名,但存在一定的机率返回相同的签名,请检查是否有问题


以下是两次调用接口返回的信息,"586c5..."是签名字段



PS: 已提交过一次但一直没回复,请核实下是平台问题还是我们实现的问题,感谢!

如果是平台问题,影响范围应该还是很大的(对于有验证校验值的小程序)

最后一次编辑于  2018-01-05  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

4 个回答

  • Band🕹
    Band🕹
    2018-01-05

    1、使用wx.login接口获取code,获取到的code不同,是否应该对应不同的session_key?

        wx.login可能会刷新session_key。刷新存在一定的间隔。换而言之如果wx.login频率较快的话,间隔期间session_key不会再被刷新。但是我们保证在此期间用code换得的session_key都是有效session_key。

    2、如果是的话,根据签名算法,应该返回不同的签名,但存在一定的机率返回相同的签名,请检查是否有问题。

        wx.getUserInfo的签名是以当前用户有效的session_key来做签名的。日志看来应该是login频率比较频繁,session_key没有被刷新导致两次签名一样。


    上述特性对应用校验签名会有怎样的影响?wx.login对于绝大多数情况应该只需要进行一次。

    2018-01-05
    赞同
    回复
  • 初
    2018-01-08

    好像不对,文档上是这么说的


    那么调用完wx.login后,不对code进行置换,应该也是会刷新sessionKey的,那么理应在调用wx.getUserInfo时,就用最新的sessionKey进行加密,是这样吧?

    2018-01-08
    赞同
    回复
  • 初
    2018-01-08

    是不是因为没有先使用code进行置换,就请求了wx.getUserInfo,所以还是使用旧的sessionKey进行加密?

    也就是说sesionKey是在使用code置换后才会更新sessionKey(并且用于加密数据)?所以当r2在调用wx.getUserInfo时,由于还没有使用code置换sessionKey,所以r2中的数据还是使用s1进行加密。

    这样的话就是我们实现的问题了,应该分开,处理完wx.login后,再调用wx.getUserInfo

    2018-01-08
    赞同
    回复
  • 初
    2018-01-08

    @Band 我们是这么实现的,先调wx.login,完成后再调用wx.getUserInfo,然后把code及用户信息等一并传到服务端进行验证。

    假设两次请求及对应的sessionKey分别是r1,s1和r2,s2,那么会有一定机率出现使用s2解密不了r2数据、签名也不通过,但使用s1对r2解密及验证签名却都可以。

    2018-01-08
    赞同
    回复