文档中心 > 御城河

端解密常见FAQ

更新时间:2022/02/17 访问次数:5347

端解密场景FAQ

签名非法(Invalid sign)

1.确定签名算法是否正确

  • JAVA客户端

    String sSignStr = "fasdfasdfappKey458756388appNametestati1234560123456sessionId234234234taobaoUserId23423432time2021-08-10 14:59:11topAppKey573014userId223430998userIp127.0.0.1fasdfasdf";
    Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
    SecretKeySpec secret_key = new SecretKeySpec(appSecret.getBytes("utf-8"), "HmacSHA256");
    sha256_HMAC.init(secret_key);
    String signature = Base64.encodeBase64String(sha256_HMAC.doFinal(sSignStr.getBytes("utf-8")));
    注意:需指定getBytes编码为utf-8,否则可能出现不同环境 不同版本的JDK加密出来的数据不一致

  • PHP客户端:

    $dataStr = 'fasdfasdfappKey458756388appNametestati1234560123456sessionId234234234taobaoUserId23423432time2021-08-10 14:59:11topAppKey573014userId223430998userIp127.0.0.1fasdfasdf';
    $appSecret = 'fasdfasdf';
    // hash_hmac之后需要返回的二进制,因此最后一个参数需要true
    $sign = base64_encode(hash_hmac('sha256', $dataStr, $appSecret, true));

    以上述Demo为例,加密出来的秘钥值为:sUrE4M7oN1FkBFnj0kHTUA1gJsvT4Ps/iYwJBOZzXzc=。不同客户端语言接入的时候可以以上述Demo数据作为测试数据,来验证自己的加密算法是否正确

2.签名算法验证正常(即使用上诉示例数据加密出来的sign是正确的),但是在使用的时候还是报sign非法

  • 确认参与加密的time字段和实际请求的time字段是否一致。即签名里面的时间值在前后端交互过程中经常会使用不一致。后端会把sign生成好了,并返回相应的参数给前端,包括时间,前端再请求sec-token。请求的时候传递的时间可能不是后端下发的,这个时候会导致sign校验过不去

  • 确认参与加密的字段是否是请求的所有参数,不同接口请求传参不一样, 每次请求都需要获取新的sign(即有接入方反馈说第二步中获取sec-token是正常的,但是获取top-token的时候提示sign非法,第三步生成sign的时候需要把topToken、secToken、method等参数也加进去计算签名)

  • 如使用的是C++ SDK需要升级到版本(1.0.70.703)及以上

RESULT_TOKEN_NULL

出现该错误的原因及sec_token不存在或已失效

  • sec_token有效期为1天,请确认sec_token是否已失效。(可申请一个新的sec_token)重试后看是否正常

  • 确认sec_token是否被转义/截断。如接入方在使用sec_token时会将sec_token的值存到cookie中,但是因为sec_token中存在特殊字符可能导致取出来的cookie值并非期望的。解决方案是在写入cookie时使用encodeURIComponent进行编码,取值时使用decodeURIComponent进行解码

isv.time-invalid

出现该错误的原因是传递的时间非法

  • 确认参数中是否传递了time字段

  • time字段的格式是否是yyyy-MM-dd HH:mm:ss

  • time取值必须是当前时间,且误差在5秒内。如通过打断点时间和阿里云时钟间隔超过5s则会出错

未知异常,需要联系小二解决 No ‘Access-Control-Allow-Origin’ 跨域问题

  • 需要在开放平台配置IP白名单(淘宝开放平台 > 安全中心 > IP白名单设置) 可配置多个

哎呦诶,被挤爆啦,请稍后重试 缺少bx-ua的header头信息

  • 在登陆和解密页面需要加载js sdk

    <script src="https://g.alicdn.com/ali-data-safe/securesdk_v3/0.0.2/sec-min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    <script src="https://g.alicdn.com/code/npm/@ali/cro-securesdk/0.0.5/secToken.js"></script>

  • 确认sec-min.js放到header最前面,提前加载,预计需要300ms-500ms内初始化完成。确保在sec-min.js加载完成后再发起调用

  • 如果上述步骤都确认过header投还是没有出现bx-ua的信息,可能存在的情况: 1.排查公司内部是否有通用组件对header头进行过滤

FAQ

关于此文档暂时还没有FAQ
返回
顶部