首页 > 编程语言 >post请求,go源码会把“+”字符转成了空格导致的验签失败问题

post请求,go源码会把“+”字符转成了空格导致的验签失败问题

时间:2023-08-07 09:22:07浏览次数:46  
标签:uid 接口 go 源码 v7 验签 post 客户端

问题描述:

安卓7.29的包客户端书城男女图书页面显示异常,冷启动、下拉刷新等都无法恢复,个别用户清除缓存数据后恢复。(说明:安卓从72880开始的包,客户端书城接口升级为v7:/api/v7/book-store,post请求)

 

问题原因:

线上书城男女图书v7接口part1的 post接口请求,个别手机出现401验签失败。

主要原因为:客户端请求参数里的track_id(值为uid和时间戳的拼接)含有“+”字符,客户端把“+”当成字符串生成了sign值。但是在http协议中“+”就是空格,所以服务端接受到的值是正常的(底层的go源码把+转成了空格),导致生成的sign跟客户端上传的sign不一样,出现验签失败。

 

疑问点1:为什么v6没有问题,v7有问题?

原因:因为v6接口发现有偶现的401问题,排查到是uid含有”+“导致的,服务端就临时把api/v6/book-store的post接口去掉了参数验签,客户端去掉了无用的uid传参。在后续的需求中,书城接口增加了track_id,值为uid和时间戳的拼接。接口在升级为v7时没有考虑到这个点,服务端接口加有验签,测试设备无uid含有“+“的情况,故而没有及时发现。

 

疑问点2:为什么只有part1接口有问题,part2接口正常?

原因:track_id字段只在part1接口里有增加,主要用于排行榜的使用。

 

疑问点3:为什么出现问题的用户,在清除数据后能恢复正常?

原因:查证确认为相同source_uid用户的uid不是唯一的,有在变化,有带“+”的,有不带“+”的。

 

影响范围:

安卓版本号大于72880,设备获取的uid含有“+”字符的用户。

 

解决方法:

1、服务端临时把api/v7/book-store的post接口去掉了参数验签(7月31日 17:05已修复上线,用户已恢复正常)

2、推进客户端从根源上解决,uid里面的值最好是解析之后的正常值(重点推进处理,期望下迭代解决)

 

后续改进:

1、前期发现的问题应该及时推进从根本上解决。

2、服务端针对401验证失败的接口修改监控报警,以便及时发现问题。

 

说明:

此问题仅对post请求有影响,get请求不需要客户端处理参数encode, 因为get请求默认对参数做了encode。所以get请求不会有401情况。

 

标签:uid,接口,go,源码,v7,验签,post,客户端
From: https://www.cnblogs.com/JodieRao/p/17599705.html

相关文章

  • 初识Go(Golang)语言
    初识Go(Golang)语言Go的诞生1.Go语言的发展历程 2007年,谷歌工程师RobPike,KenThompson和RobertGriesemer开始设计一门全新的语言,这是Go语言的最初原型。 2009年11月10日,Google将Go语言以开放源代码的方式向全球发布。 2015年8月19日,Go1.5版发布,本次......
  • GO语言刷题
    ###GO刷题记录二分法查找给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。示例1:输入:nums=[-1,0,3,5,9,12],target=9输出:4解释:9出现在nums中并且下标为4示例2:输入:nums......
  • django之manage.py migrate无效的问题
    问题已有的model,迁移之后,想重新设置字段,于是将migrations文件夹中除__init__.py之外其他文件都删掉,并且把数据库中的表删除,再次执行以下步骤pythonmanage.pymakemigrations确认成功,执行pythonmanage.pymigrate,提示Nomigrationstoapply.无法对表模型进行更改。解决方案p......
  • 【题解】Luogu[P9504] 『MGOI』Simple Round I C. 魔法禁林
    Link这题我们发现如果直接去枚举生命和法力值显然是不行的,又看到说最小的生命值,不禁想到最短路,但是怎么跑?我们令经过一条边之前魔力值为\(k\),那么该边的边权为\(\lfloor\dfrac{w}{k}\rfloor\),于是我们讲题目转化为了边权为\(\lfloor\dfrac{w}{k}\rfloor\)时\(s\)到\(t\)......
  • 【LGR-148-Div.3】洛谷基础赛 #1 & MGOI Round I
    【LGR-148-Div.3】洛谷基础赛#1&MGOIRoundI据说是普及组难度?T1P9502『MGOI』SimpleRoundI|A.魔法数字\(100pts\)题目描述初级魔法士小M的魔法数字是\(2\)。给定一个正整数\(n\),小M需要找到最大的偶数\(m\),使得\(2^m<n\)。又双叒叕是个水题,然后被又双......
  • 【LGR-148-Div.3】洛谷基础赛 #1 & MGOI Round I
    T1简单题,题面十分清晰,就是给我们\(n\),要求使\(2^m<n\)成立的最小偶数\(m\)。(要注意\(log_2N=m,m|2\)的情况)#include<bits/stdc++.h>#definelllonglong#definereregisterusingnamespacestd;constintN=800,INF=0x3f3f3f3f;lln;intmain(){ cin>>n; llk=log......
  • bazel test 编译失败:googletest、gtest 报错
    问题描述bazeltest遇到很多奇怪的编译错误,报错位置位于“googletest”目录,而且没有修改过googletest源码:ERROR:/bazel_cache/output_user_root/.../external/google/BUILD.bazel:80:11:Compilinggoogletest/src/gtest-matchers.ccfailed:(Exit1):gccfailed:errore......
  • 【2023.08.06】乐高Lego福运成双80110积木评测
    前言本人是自费购买积木,购买原因是给妹妹培养动手能力,减少短视频占用时间,其次是给家里做摆饰,所以选择积木多考虑了美观非专业评测,如果想看更多积木评测请点进我的博客主页分类查看正文这次的积木整体创意挺好的,斜着拼装红色和金色电镀件很好看,金色的电镀件颜色反射非常均匀......
  • 外卖点餐源码|点餐小程序源码h5
     外卖点餐源码 外卖点餐系统是一种软件,可以让餐馆、咖啡店或酒吧在线接受订单。它通常允许顾客选择和支付食物,然后在订单发出时提醒厨房。这是在员工和客户之间没有联系的情况下发生的。网上订购系统是一个过程,人们可以通过使用互联网,坐在家里或任何地方,从当地的一些餐......
  • Go Runtime功能初探
    GoRuntime功能初探旅途散记 2023-08-0407:45 发表于上海收录于合集#go44个题图来自 UnderstandCompileTime&&Runtime!ImprovingGolangPerformance(1)[1]以下内容,是对 运行时runtime的神奇用法[2] 的学习与记录目录:1.获取GOROOT环境变量2.获取GO的......