API接口安全性设计思路

在工作中经常遇见项目对接,那么该如何写一个安全的接口供给对方调用呢???

1.公共接口,任何人都可以访问调用
1.1.适合场景,公司后台整合广告管理,提供统一的接口返回给公司其他项目调用和邮件模板调用,这时候需要设计一个统一的接口,返回广告的内容。还有天气查询等场景。

 @PostMapping("/syncInfo")  
 public Result syncInfo(@RequestParam(name = "data")String data){  
       if(!StringUtils.isNotBlank(data)){  
           return  new Result("失败!",false,HttpCode.STATUS_104);  
       }  
       InfoVo infoVo = JSONObject.parseObject(data,InfoVo.class);  
       dealInfo(infoVo);  
       return  new Result("成功!",true, HttpCode.STATUS_200);  
 }

2.接口参数加密
2.1.适合场景,公司内部两个项目组进行对接,为了防止接口被暴露和伪造访问,这个时候需要对参数进行加密处理,防止接口被其他外部人员调用,一般采用desc或者aes对称加密,约定好秘钥进行对接。

@PostMapping("/syncInfo")  
public Result syncInfo(@RequestParam(name = "data")String data){  
    try {  
          if(!StringUtils.isNotBlank(data)){  
              return  new Result("失败!",false,HttpCode.STATUS_104);  
          }  
          DES des = new DES("秘钥".getBytes());  
          String j = des.decryptStr(data);  
          logger.debug("解码前:" + data);  
          logger.debug("解码后:" + j);  
          InfoVo infoVo = JSONObject.parseObject(j,InfoVo.class);  
          dealInfo(infoVo);  
          return  new Result("成功!",true, HttpCode.STATUS_200);  
      }catch (Exception e){  
            e.printStackTrace();  
            if(!StringUtils.isNotBlank(data)){  
                return  new Result("系统错误!",false,HttpCode.STATUS_105);  
            }  
      }  
}

3.接口时效性加密+接口参数加密
3.1.适合场景,内部接口加密过的数据链接被暴露,不断有相同数据对接口进行访问,这个适合需要对接口加入时间戳参数,设计失效时间解决这个问题。

@PostMapping("/syncInfo")  
public Result syncInfo(@RequestParam(name = "data")String data){  
    try {  
          if(!StringUtils.isNotBlank(data)){  
              return  new Result("失败!",false,HttpCode.STATUS_104);  
          }  
          DES des = new DES("秘钥".getBytes());  
          String j = des.decryptStr(data);  
          logger.debug("解码前:" + data);  
          logger.debug("解码后:" + j);  
          InfoVo infoVo = JSONObject.parseObject(j,InfoVo.class);  
          if(AddSecondes(infoVo.getTime(),20) < new Date().getTime()){  
              return new Result("接口失效!",false,HttpCode.STATUS_100);  
          }  
          dealInfo(infoVo);  
          return new Result("成功!",true, HttpCode.STATUS_200);  
      }catch (Exception e){  
            e.printStackTrace();  
            if(!StringUtils.isNotBlank(data)){  
                return new Result("系统错误!",false,HttpCode.STATUS_105);  
            }  
      }  
  
}  

4.接口时效性+接口参数加密+不同来源的私钥
4.1适合场景, 当接口秘钥被泄露时,我们可以对不同的数据来源设置不同的私钥,这样即使接口秘钥被泄露,没有私钥,依然不能对接口进行操作,而且可以记录是哪个项目的秘钥被泄露,快速定位出问题的来源,且不会影响其他项目调用。

@PostMapping("/syncInfo")  
public Result syncInfo(@RequestParam(name = "data")String data){  
    try {  
          if(!StringUtils.isNotBlank(data)){  
              return  new Result("失败!",false,HttpCode.STATUS_104);  
          }  
          DES des = new DES("基础秘钥".getBytes());  
          String j = des.decryptStr(data);  
          logger.debug("解码前:" + data);  
          logger.debug("解码后:" + j);  
          InfoVo infoVo = JSONObject.parseObject(j,InfoVo.class);  
          if(AddSecondes(infoVo.getTime(),20) < new Date().getTime()){  
              return  new Result("接口失效!",false,HttpCode.STATUS_100);  
          }  
          String sign = getSignByFrom(Info.getFrom());  
          logger.debug("来源秘钥"+sign);  
          String k = des.decryptStr(Info.getData);  
          dealInfo(k);  
          return  new Result("成功!",true, HttpCode.STATUS_200);  
      }catch (Exception e){  
            e.printStackTrace();  
            if(!StringUtils.isNotBlank(data)){  
                return  new Result("系统错误!",false,HttpCode.STATUS_105);  
            }  
      }  
}  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您想了解关于统一API接口平台设计的信息,我可以为您提供一些基本的概念和思路。 首先,API接口平台是一种基于网络技术的软件系统,它提供了一组标准的接口,使得不同的应用程序和系统之间可以进行数据交换和信息共享。而统一API接口平台则是针对不同的应用程序和系统,提供一种通用的API接口,以便于它们能够更加方便、快捷地集成和交互。 在设计统一API接口平台时,需要考虑以下几个方面: 1. 标准化接口设计通用的API接口,以便于不同的应用程序和系统可以共同使用。要求API接口具有一致性、可扩展性和易用性等特点,同时遵循一定的规范和标准。 2. 安全性:由于涉及到数据交换和信息共享,必须确保API接口平台的安全性。需要采取一些安全措施,如身份验证、访问控制、数据加密等,以防止恶意攻击和数据泄露等问题。 3. 高性能:由于API接口平台需要处理大量的数据流量和请求,必须具备高性能的特点。需要采用一些优化技术,如负载均衡、缓存、异步处理等,以提高系统的响应速度和性能表现。 4. 可视化管理:API接口平台需要提供一套管理界面,以便于管理员可以对API接口进行管理和监控。同时还需提供一些监控指标和报告,以便于管理员能够实时了解系统的运行情况和性能表现。 总体来说,设计统一API接口平台需要考虑多个方面的因素,包括标准化接口安全性、高性能和可视化管理等。只有将这些因素综合考虑,才能设计出一个功能强大、安全可靠、易用高效的API接口平台。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值