zoukankan      html  css  js  c++  java
  • 项目API接口鉴权流程总结

    权益需求对接中,公司跟第三方公司合作,有时我们可能作为甲方,提供接口给对方,有时我们也作为乙方,调对方接口,这就需要API使用签名方法(Sign)对接口进行鉴权。每一次请求都需要在请求中包含签名信息, 以验证用户身份,不然任何人都可以调我们公司的接口,会导致安全隐患。

    思路:在接口请求参数都带上appKey,签名sign和时间戳timestamp等字段。

    假如我们是甲方时,那么需要让乙方在目标网站上申请或者给乙方提供安全凭证(appKeyappSecret),其中 appKey是用于标识 API 调用者的身份,appSecret是用于加密签名字符串和服务器端验证签名字符串的密钥。appSecret必须严格保管。避免泄露。

    乙方(对方)需要做

    根据甲方(我们)提供appSecret和需要传的特定参数生成的签名sign,最后在接口的url参数拼接上,签名sign,时间戳timestampappKey等参数。

    具体步骤如下:

    1.    对参数进行排序和拼接

    首先对请求参数按参数名做字典序升序(自然顺序)排列,然后格式化特定的形式,例如 k=v的形式,同时参数间使用"&"拼接在一起,或者kv的形式,不用"&"拼接的形式(注意不包括签名Sign参数,v为原始值而非url编码后的值)

    示例 采用k=v的形式,同时参数间使用"&"拼接在一起

    appkey=00159&from=51916&phone=13612549848&thirdOrderId=768169123&timestamp=2020-10-22 17:39:08&ver=3.4

    2.    使用特定的加密算法进行加密(Md5SHA),再进行大小写格式化等操作

    String sig = MD5Utils.EncoderByMd5(appSecret + “参数进行排序和拼接后的字符串”+ appSecret).toLowerCase().substring(0, 30);

    3.  url拼接签名sign,时间戳timestampappKey等参数

    StringBuilder stringBuilder = new StringBuilder(url);
    if (url.contains("?")) {
        stringBuilder.append("&client_id=").append(clientId)
                .append("&ext_user_id=").append(phead.getUserId())
                .append("&sign=").append(sign)
                .append("&timestamp=").append(timestamp)
                .append("&phone=").append(phone)
                .append("&callback_info=").append(phead.getUserId());
    }

    项目实战

    示例1

    示例2

     我们(甲方)要做

    拿到对方请求我们传过来的参数中的签名signappKey和时间戳等字段,然后通过appKey去获得对应的密码appSecret(这两个参数appKeyappSecret是我们定义后给乙方的),我们通过和乙方一样的方式生成签名sign2,最后比较对方传过来的sign值和我们以同样方式生成得到的sign2是不是一致,一致签名验证就通过,不一致签名就是失败;

    注意:有了签名,基本上数据的合法性就得到了保障。只要坏人没有秘钥就无法伪造调用方的请求。但坏人依然可以截取调用方的请求,不停的发送给服务端,造成服务端资源紧张、数据错误等不好的结果。为了防止同样的请求多次发送,我们往往还要求调用方提供一个唯一的序列号,比如UUID、时间戳之类的。服务端需要在收到请求的第一时间校验该唯一序列号。我们可以通过spring的切面或者拦截器来做。

    参考/好文 

    https://www.web3.xin/index/article/156.html

  • 相关阅读:
    Martix工作室考核题 —— 打印一个菱形
    Martix工作室考核题 —— 打印一个菱形
    Martix工作室考核题 —— 打印九九乘法表
    Martix工作室考核题 —— 打印九九乘法表
    Martix工作室考核题 —— 打印九九乘法表
    Martix工作室考核题 —— 201938 第三题
    Martix工作室考核题 —— 201938 第三题
    Martix工作室考核题 —— 201938 第三题
    Martix工作室考核题 —— 201938 第一题
    fiddler模拟发送post请求
  • 原文地址:https://www.cnblogs.com/liaowenhui/p/13861572.html
Copyright © 2011-2022 走看看