(一)涉及的工具以下是需要用到的在线网站和文档链接:
(二)基础参数API ID:零信任新建API设备后,会生成一个ID,此ID为API ID;
API密钥:生成API设备后,会生成一个用于校验的密钥,需要管理员密码才可以查看;
时间戳:时间戳为Unix时间戳格式,单位为秒,10位长度的正整数;为了防范重放攻 击,需要在请求头中携带客户端的当前时间戳,服务端在校验签名前会先校验该时间戳, 当该时间戳与服务端当前时间之差大于5分钟时,请求会被认为是一个已经过期的请求。
Nonce:nonce是个随机字母+数字组成的字符串,优先建议使用uuidv4的方法计算。
若在测试过程中使用uuidv4计算有难度,也可直接使用举例的字符串进行测试。
签名串:组成要素:请求路径、query参数、body参数;
签名串 = 请求路径 + ? + query参数 + & + body参数
当body参数不存在时: 签名串 = 请求路径 + ? + query参数
当query参数不存在时: 签名串 = 请求路径 + ? + body参数
当body参数和query参数都不存在时: 签名串 = 请求路径
签名密钥:组成要素:API ID、API密钥、时间戳、nonce
签名密钥 = 'appId=' + API ID + '&' + 'appSecret=' + API密钥 + '&' + 'timestamp=' + 时间戳 + '&' + 'nonce=' + nonce
签名:利用签名密钥将签名串以hmacSHA256的加密算法生成的一串加密代码;
Query参数:
签名串中使用的query参数需要对key进行ascii排序
例如:因为p的字母序小于u,所以password=123&username=sf是正确的,而
username=sf&password=123是错误的
BODAY参数:
POST请求中的json,为了跨语言兼容,这里必须是紧凑格式的json,逗号和分号后不能有空格和换行,
如:{"key1":"value1"}
(三)调试接口必填参数请求头部需要包含有:
签名:x-ca-sign
API ID:x-ca-key
时间戳:x-ca-timestamp
nonce:x-ca-nonce
Postman示例:
二、接口调用(一)调用流程1.获取API ID和API密钥管理员登录控制中心控制台,进入[系统管理/开放平台点击<添加>新建设备联动列表;
进入设备联动配置页面,完成基本信息和API设置,并点击<保存>;
可在Open API页面查看到创建的设备。
创建好可以看到API ID,点击显示密钥,输入atrust管理员密码获取API密钥;
API ID:2524242
API密钥:9d38d9b1c5dc4db3b72e3e49b101012c
2.Postman需要的参数使用postman基本流程:
1.新建项目
2.对应项目右键新增request
3.需要填写的参数
根据接口文档,选择需要填入的参数;
下图为示例:
(二)调用举例1.查询在线用户1)查看接口文档
从接口文档中能够得出:
A.接口路径为/api/v1/monitor/getUserStatus,请求方式为GET
B.确认请求参数为query;则不需要在body中输入请求内容;
C.必须要填的参数是pageSize和pageIndex=1
2)获取签名
A.API ID和API 密钥已获取;
C.获取nonce
可以自己写代码获取,也可以直接拿测试样例;
这里使用测试样例:
f5f0fe63-5b3e-4e44-908c-b95758b6d7e4
D.获取签名串
签名串由接口路径+参数
/api/v1/monitor/getUserStatus?pageSize=20&pageIndex=1
注意:
这里如果这么生成会提示签名校验错误
所以需要将签名串修改为:
/api/v1/monitor/getUserStatus?pageIndex=1&pageSize=20
按字母顺序,I在S前面;所以要修改下顺序;
E.获取签名
根据已有的信息:
API ID:2524242
API密钥:9d38d9b1c5dc4db3b72e3e49b101012c
时间戳:1668419395
随机数:f5f0fe63-5b3e-4e44-908c-b95758b6d7e4
签名密钥 = 'appId=' + API ID + '&' + 'appSecret=' + API密钥 + '&' + 'timestamp=' + 时间戳 + '&' + 'nonce=' + nonce
签名秘钥:
appId=2524242&appSecret=9d38d9b1c5dc4db3b72e3e49b101012c×tamp=1668419395&nonce=f5f0fe63-5b3e-4e44-908c-b95758b6d7e4
签名串:/api/v1/monitor/getUserStatus?pageIndex=1&pageSize=20
使用签名秘钥和签名串使用HMAC-SHA256算法计算出签名
签名结果:59345f494a006297e8e081e998b7b58145b7e976d1ae2ff5db497df65f87fc30
(如需根据该示例进行测试,需要改成自己的API ID和密钥,修改时间戳,重新生成签名)
3)填入postman
正常获取到在线用户信息
Ps:
这里的查询参数是只传了页数和每页的数量;
可以继续传过滤和搜索名称的参数;
2.踢出在线用户
1)查看接口文档
从接口文档中能够得出:
A.接口路径为/api/v1/monitor/kickoutUsers,请求方式为POST
B.确认请求参数为body;则不需要在query栏中输入参数,仅需要在body中填写紧凑型json语句;请求头多了一个Content-Type
C.必须要填的参数是userList和userList底下的├─name以及├─userDirectoryName
2)获取签名
A.API ID和API 密钥已获取;
C.获取nonce
可以自己写代码获取,也可以直接拿测试样例;
这里使用测试样例:
f5f0fe63-5b3e-4e44-908c-b95758b6d7e4
D.body中参数需要修改成紧凑型josn
name和userDirectoryName具体的value根据查询在线用户中的value填写;
E.获取签名串
签名串由接口路径+参数
/api/v1/monitor/kickoutUsers?{"userList":[{"name":"18812312312","userDirectoryName":"LDAP"}]}
F.获取签名
根据已有的信息:
API ID:2524242
API密钥:9d38d9b1c5dc4db3b72e3e49b101012c
时间戳:1668420886
随机数:f5f0fe63-5b3e-4e44-908c-b95758b6d7e4
签名密钥 = 'appId=' + API ID + '&' + 'appSecret=' + API密钥 + '&' + 'timestamp=' + 时间戳 + '&' + 'nonce=' + nonce
签名秘钥:
appId=2524242&appSecret=9d38d9b1c5dc4db3b72e3e49b101012c×tamp=1668420886&nonce=f5f0fe63-5b3e-4e44-908c-b95758b6d7e4
签名串:
/api/v1/monitor/kickoutUsers?{"userList":[{"name":"18830650910","userDirectoryName":"LDAP"}]}
使用签名秘钥和签名串使用HMAC-SHA256算法计算出签名
签名结果:97c016d63884e5e4d1bc817b3c226cb962ad6485b85a3bcbe5d401082c126a93
(如需根据该示例进行测试,需要改成自己的API ID和密钥,修改时间戳,重新生成签名)
3)填入postman
请求成功,成功踢出用户
ps:简单测试了两个接口; 其他接口按照测试文档测试即可(测试指导链接https://bbs.sangfor.com.cn/plugin.php?id=sangfor_databases:index&mod=viewdatabase&tid=256629)