如何通过TOTP方式向API发送指定JSON格式的作业数据?
可行实现方案
TOTP的定位是基于时间的动态身份校验令牌,不是传输加密算法,没法直接用来加密包裹你的JSON数据传输,行业内通用的落地方案是把TOTP作为请求鉴权因子,搭配HTTPS通道传输目标业务数据,完全可以满足你的需求,具体实现流程如下:
- 提前在客户端和API服务端对齐TOTP规则参数:两边预存相同的共享密钥,约定统一的哈希算法(常规用SHA1)、动态码长度(通用6位)、时间步长(默认30秒),参数不一致会直接导致校验失败。
- 客户端发起请求前,先基于当前Unix时间戳和预存参数生成合法TOTP动态码,不要把动态码塞进你要传的业务JSON结构里,两种常规携带方式:
- 放在自定义请求头中,格式参考:
X-Auth-TOTP: 生成的6位动态码 - 作为URL查询参数拼接在API地址后,格式参考:
/api/submit?totp=xxxxxx
- 放在自定义请求头中,格式参考:
- 构造符合要求的业务请求体,JSON结构严格匹配要求:
{ "gist": "填入对应作业要点内容", "email": "填入对应接收/提交邮箱地址" }
- 发起POST请求把上述JSON作为请求体发送给API,服务端收到请求后会优先做TOTP校验:服务端会用相同规则生成当前时间窗口(一般会允许前后各1个步长的时间容错,覆盖总共90秒的时间差范围,避免客户端服务端时间不同步导致校验失败)的TOTP值,和你请求携带的动态码做比对,校验通过才会解析JSON体处理业务,校验不通过会直接返回401未授权错误。
注意:不要尝试用TOTP直接加密JSON内容,TOTP本身不具备payload加密能力,整个传输过程必须走HTTPS加密通道,避免传输内容被窃听、篡改。
内容的提问来源于stack exchange,提问作者Ramen
相关产品推荐
相关产品推荐

