关于token和sign介绍,附postman动态生成token和sign请求(含php获取请求头信息)
·
Token:令牌
- 描述:用来判断用户身份的一个标识。
- 生成:用户在成功登陆后,后端生成一个token(可以是经过编码加密的一个字符串),将token返回给前端,同时后端将koken和用户id和时间戳存入缓存数据库(如果用户量不大的话可以考虑直接存储到数据库)中。
- 验证:在前端调用接口的时候,需要携带token(如果不携带,认为你非法调用接口),后端根据token和时间戳判断token是否有效或者是否过期,如果过期让用户重新登录,并删除旧的token,重新生成token,重新用户id和时间戳和token存入到数据库中。
- 其他常用token生成方式:
- 用设备mac地址作为token:客户端在登录时获取设备的mac地址,将其作为参数传递给服务端。
优点是客户端登录一次之后就能够一直使用,无需重新登录。缺点是数据库需要为每一个登录的设备存储mac地址。 - 用sessionid作为token:客户端登录并通过服务端校验之后,将本地获取的sessioinid作为token返回给客户端。
优点是不用存储数据。缺点是session过期后客户端就必须重新登录。
Sign:签名
- 描述:用来判断请求是否来自于自己允许的平台,所以一般是对接其他 平台的情况下会用到sign。
- 生成:进行接口调用的时候,自己需要的参数,加上与平台对接时会给你一个或多个特定的密钥,比如叫corpid,还可能需要token,然后将你的这些东西进行拼接之后进行某种加密算法(可能这里还需要涉及到一个密钥)的加密之后变成一个字符串,然后拿着这个字符串进行接口请求。
- 平台那边会用相同的方式进行解密,如果各参数都正确,则会返回正确结果,否则返回错误码。
利用postman编程生成token和sign
描述:在接口有token和sign校验的情况下,我们使用postman进行接口测试的时候,每次生成token和sign会很麻烦。
案例
-
header
Content-Type:application/json account:test timestamp:{{timestamp}} token:{{token}} sign:{{sign}}postaman写法

-
body
{ "param1":"123" }postman

-
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

-
这里有可能会报一个错:
There was an error in evaluating the Pre-request Script: JSONError: Unexpected token 'o' at 1:2 [object Object] ^

-
原因是不是json格式,不需要JSON.parse()

php获取请求头中的token和sign
- 关键代码:
getallheaders()方法public function demoTest() { return json($data); } - response

更多推荐
所有评论(0)