Token:令牌

  1. 描述:用来判断用户身份的一个标识。
  2. 生成:用户在成功登陆后,后端生成一个token(可以是经过编码加密的一个字符串),将token返回给前端,同时后端将koken和用户id和时间戳存入缓存数据库(如果用户量不大的话可以考虑直接存储到数据库)中。
  3. 验证:在前端调用接口的时候,需要携带token(如果不携带,认为你非法调用接口),后端根据token和时间戳判断token是否有效或者是否过期,如果过期让用户重新登录,并删除旧的token,重新生成token,重新用户id和时间戳和token存入到数据库中。
  4. 其他常用token生成方式:
  5. 用设备mac地址作为token:客户端在登录时获取设备的mac地址,将其作为参数传递给服务端。
    优点是客户端登录一次之后就能够一直使用,无需重新登录。缺点是数据库需要为每一个登录的设备存储mac地址。
  6. 用sessionid作为token:客户端登录并通过服务端校验之后,将本地获取的sessioinid作为token返回给客户端。
    优点是不用存储数据。缺点是session过期后客户端就必须重新登录。

Sign:签名

  1. 描述:用来判断请求是否来自于自己允许的平台,所以一般是对接其他 平台的情况下会用到sign。
  2. 生成:进行接口调用的时候,自己需要的参数,加上与平台对接时会给你一个或多个特定的密钥,比如叫corpid,还可能需要token,然后将你的这些东西进行拼接之后进行某种加密算法(可能这里还需要涉及到一个密钥)的加密之后变成一个字符串,然后拿着这个字符串进行接口请求。
  3. 平台那边会用相同的方式进行解密,如果各参数都正确,则会返回正确结果,否则返回错误码。

利用postman编程生成token和sign

描述:在接口有token和sign校验的情况下,我们使用postman进行接口测试的时候,每次生成token和sign会很麻烦。

案例

  1. header

    Content-Type:application/json
    account:test
    timestamp:{{timestamp}}
    token:{{token}}
    sign:{{sign}}
    

    postaman写法在这里插入图片描述

  2. body

    {
    "param1":"123"
    }
    

    postman
    在这里插入图片描述

  3. Pre-request Script

    var CryptoJS = require('crypto-js')
    
    // 时间戳
    var timestamp = Math.round(new Date().getTime());
    postman.setEnvironmentVariable("timestamp", timestamp);
    
    // token
    var tokenStr = "test" + "test" + timestamp
                    + "a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3";
    var token = CryptoJS.SHA256(tokenStr).toString(CryptoJS.enc.Hex).toLowerCase();
    postman.setEnvironmentVariable("token", token);
    
    // 通过request.data获取body的内容,这个是postman内置变量
    // var params = JSON.parse(request.data); 这里代码需要注意
    var params = request.data;
    
    // sign
    var signStr = params.param1 +
                  "a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3";
    var sign = CryptoJS.SHA256(signStr).toString(CryptoJS.enc.Hex).toLowerCase();
    postman.setEnvironmentVariable("sign", sign);
    

    postman
    在这里插入图片描述

  4. 这里有可能会报一个错:There was an error in evaluating the Pre-request Script: JSONError: Unexpected token 'o' at 1:2 [object Object] ^
    在这里插入图片描述

  5. 原因是不是json格式,不需要JSON.parse()
    在这里插入图片描述

php获取请求头中的token和sign

  1. 关键代码:getallheaders()方法
    public function demoTest() {
      return json($data);
    }
    
  2. response
    在这里插入图片描述
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐