当前位置:网站首页>对API接口或H5接口做签名认证
对API接口或H5接口做签名认证
2022-07-07 05:59:00 【有何不可0307】
参数签名认证
为了防止客户端访问的 API 接口被伪装攻击、数据泄漏等安全风险。通过与服务器端联调实现接口安全的方式,利用 API 接口签名能有效的防范这些安全问题和风险。对接口参数进行签名有如下优点:
保证请求有效性
参数变化会导致签名变化,否则将是一个无效的请求;保证请求合法性
签名算法依赖服务器分发的一对clientKey和secretKey,clientKey能区分出客户端即调用者身份,服务器端能根据secretKey判断出签名是否合法。
Android客户端签名认证的规则之一:
对各参数进行排序,拼接各参数和参数值,然后拼接密钥secretKey,最后进行MD5加密。生成一个参数sign。
实现代码
- 定义参数键值对象
public class NetParameter {
private String key;
private String value;
public NetParameter(String key, String value) {
super();
this.key = key;
this.value = value;
}
public String getKey() {
return key;
}
public String getValue() {
return value;
}
public void setKey(String key) {
this.key = key;
}
public void setValue(String value) {
this.value = value;
}
@Override
public String toString() {
return "NetParameter [key=" + key + ", value=" + value + "]";
}
}
- 签名方法
private String sign(List<NetParameter> list, String secretKey) {
StringBuffer sb = new StringBuffer();
if (list != null) {
Collections.sort(list, new Comparator<NetParameter>() {
@Override
public int compare(NetParameter lhs, NetParameter rhs) {
return lhs.getKey().compareTo(rhs.getKey());
}
});
for (int i = 0, size = list.size(); i < size; i++) {
NetParameter p = list.get(i);
if (p != null) {
sb.append(p.getKey());
sb.append("=");
sb.append(p.getValue());
}
}
}
sb.append(secretKey);
return digest(sb.toString(), "MD5");
}
- 生成公开的Url
private String createUrl() {
StringBuffer sb = new StringBuffer();
sb.append(link);
sb.append("?");
if (list != null) {
int j = -1;
for (int i = 0, size = list.size(); i < size; i++) {
NetParameter net = list.get(i);
if (net != null) {
String key = net.getKey();
String value = net.getValue();
if (key != null && value != null) {
if (j < 0) {
j = i;
}
if (j != i) {
sb.append("&");
}
sb.append(key);
sb.append("=");
sb.append(value);
}
}
}
}
sb.append("&");
sb.append("sign");
sb.append("=");
sb.append(sign(list, getSecretKey()));
String tmp = sb.toString();
tmp = tmp.replace("?&", "?");
return tmp;
}
访问接口
当客户端生成的sign与服务器端验签的sign不一致时,访问不通过,将反馈相关的message:“无效的参数签名”。
http://192.168.1.76:8806/#/card?clientKey=05380b3c3323541917a25b001d394bf8&rand=751d7b3c-a37b-4d8f-b169-96ca2b30f286&machineNo=7700943733234077224&productName=P770&sign=FC6DE7DECCBDDB5D909D7AC0CA589BC3
边栏推荐
- POJ - 3784 running medium
- Data type - integer (C language)
- Implementation method of data platform landing
- 联想混合云Lenovo xCloud:4大产品线+IT服务门户
- [kuangbin] topic 15 digit DP
- PLSQL的安装和配置
- [Yu Yue education] basic reference materials of electrical and electronic technology of Nanjing Institute of information technology
- Lua programming learning notes
- Practice of implementing cloud native Devops based on rainbow library app
- Calling the creation engine interface of Huawei game multimedia service returns error code 1002, error message: the params is error
猜你喜欢

Installation and configuration of PLSQL

Pvtv2--pyramid vision transformer V2 learning notes

In go language, function is a type

How to realize the high temperature alarm of the machine room in the moving ring monitoring system

DeiT学习笔记

Using helm to install rainbow in various kubernetes

Opencv learning note 4 - expansion / corrosion / open operation / close operation

Splunk query CSV lookup table data dynamic query

Compilation and linking of programs

AVL平衡二叉搜索树
随机推荐
Interpreting the practical application of maker thinking and mathematics curriculum
Interface as a parameter (interface callback)
Opencv learning notes II - basic image operations
[Chongqing Guangdong education] accounting reference materials of Nanjing University of Information Engineering
opencv 将16位图像数据转为8位、8转16
Explore creativity in steam art design
Train your dataset with swinunet
Ebpf cilium practice (2) - underlying network observability
数据分析方法论与前人经验总结2【笔记干货】
[Chongqing Guangdong education] audio visual language reference materials of Xinyang Normal University
JS的操作
打通法律服务群众“最后一公里”,方正璞华劳动人事法律自助咨询服务平台频获“点赞”
详解华为应用市场2022年逐步减少32位包体上架应用和策略
归并排序和非比较排序
uniapp 微信小程序监测网络
数据中台落地实施之法
PVTV2--Pyramid Vision TransformerV2学习笔记
Implement your own dataset using bisenet
Basic data types and string types are converted to each other
Snyk dependency security vulnerability scanning tool