API 签名认证_api签名认证(2),【工作经验分享】

  • 客户端携带参数

/**

  • 将参数添加到请求头 map

  • @return
    */
    private Map<String, String> headerMap(String body) {
    HashMap<String, String> hashMap = new HashMap<>();
    hashMap.put(“accessKey”, accessKey);
    // 一定不能发送给后端!
    // hashMap.put(“secretKey”, secretKey);
    hashMap.put(“nonce”, RandomUtil.randomNumbers(5));
    hashMap.put(“body”, body);
    hashMap.put(“timestamp”, String.valueOf(System.currentTimeMillis() / 1000));
    hashMap.put(“sign”, SignUtil.genSign(body, secretKey));
    return hashMap;
    }

  • 服务端校验参数

  • 使用同一套加密算法 / 签名生成算法

package com.ghost.leapiinterface.utils;

import cn.hutool.crypto.digest.DigestAlgorithm;
import cn.hutool.crypto.digest.Digester;

/**

  • 签名生成工具类
  • @author 乐小鑫
  • @version 1.0
  • @Date 2024-02-02-15:43
    /
    public class SignUtil {
    /
    *
  • 使用 MD5 加密算法生成签名
  • @param body 用户参数
  • @return 签名
    */
    public static String genSign(String body, String secretKey) {
    Digester md5 = new Digester(DigestAlgorithm.MD5);
    String str = body.toString() + “.” + secretKey;
    return md5.digestHex(str);
    }
    }

@PostMapping(“/user”)
public String getNameByJSON(@RequestBody User user, HttpServletRequest request) {
// 获取请求头中携带的参数,校验调用接口的权限
String accessKey = request.getHeader(“accessKey”);
// String secretKey = request.getHeader(“secretKey”);
String nonce = request.getHeader(“nonce”);
String body = request.getHeader(“body”);
String timestamp = request.getHeader(“timestamp”);
String sign = request.getHeader(“sign”);
// TODO 实际上要从数据库查是否已分配给用户
if (!accessKey.equals(“ghost”)) {
throw new RuntimeException(“无权限”);
}
// 校验随机数
if (nonce.length() > 5) {
throw new RuntimeException(“无权限”);
}

// TODO 校验时间戳 timestamp:和当前时间不能超过 5 min
// 和客户端使用同一套加密算法进行校验
String serverSign = SignUtil.genSign(body, “abcdefg”);// 实际上要从数据库中取出数据进行校验
if (!serverSign.equals(sign)) {
throw new RuntimeException(“无权限”);
}
// System.out.println("getNameByJSON 被调用,accessKey: " + accessKey + “; secretKey:” +secretKey);
return “POST 你的名字是:” + user.getUsername();
}

四、API 签名认证的六个参数

  1. 用户标识 accessKey

  2. 密钥 secretKey:不能传递给后端❗

  3. 用户参数

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
img

码讲义、实战项目、讲解视频,并且后续会持续更新**

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
[外链图片转存中…(img-d2JXf2zM-1712582325458)]

  • 18
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值