【后端-接口设计】java应用接口授权鉴权与URL防篡改详细设计

文章已收录至https://lichong.work,转载请注明原文链接。
ps:欢迎关注公众号“Fun肆编程”或添加我的私人微信交流经验🤝

一、背景

  1. 平台类系统缺乏接口鉴权功能,容易被未知第三方攻击
  2. 需要支持URL防篡改

二、设计方案

接口鉴权

  1. 颁发授权码

    系统内部维护一系列授权码,授权码绑定接口白名单,第三方系统调用时需要header携带拥有权限的授权码才能访问指定某些接口。

  2. 使用MD5签名防止URL被篡改

    第三方客户端发起请求时对URL进行MD5加密,把签名放到请求头。系统做拦截,再次对URL进行MD5加密,做签名对比,签名一致即可放行。

三、详细设计

1. 新增配置项

  • 配置项一:接口授权管理是否生效

配置项:work.lichong.security.interface.managent.open

名称:接口授权管理是否生效

说明:系统对外接口授权管理功能的开关,默认不开启。

类型:是/否

默认值:否

  • 配置项二:URL防篡改是否开启

配置项:work.lichong.security.interface.tr.open

名称:URL防篡改是否开启

说明:系统对外接口URL防篡改(Tamper Resistant)功能的开关,默认不开启。

类型:是/否

默认值:否

2. 新增接口授权管理页面

页面提供新增授权、维护授权、删除授权功能

  • 新增授权

    点击“新增授权”按钮,弹出表单,表单内可以编辑授权的接口,提交表单时各接口以分号间隔。

    **表单内容:**授权名称、授权接口列表(支持正则)

    新增成功后刷新接口授权表格

  • 维护授权

    接口授权管理页面有一个接口授权表格,分别有列:序号、名称、接口列表、操作,默认按照创建时间倒序排列。“操作”列提供“维护”按钮、“查看授权码”、“暂停/启用”、”删除“按钮。其中 操作事件

    • 维护:弹出表单,样式同“新增授权”一样,可进行编辑与保存。
    • 查看授权码:弹出提示框,显示授权码。右下角提供“重置授权码”和“关闭”按钮,点击“重置授权码”后弹出提示框要求用户确认“重置后当前授权码将会失效且不可恢复,是否确认重置授权码?”
    • 删除:点击“删除”后弹出提示框要求用户确认“删除当前授权信息后此授权将会失效且不可恢复,是否确认删除此授权?”

3. 接口授权过滤

新增过滤器InterfaceAuthSecurityFilter,在work.lichong.security.interface.managent.open配置项值为1时,拦截对外接口,从urlauthcodeheader中获取到授权码,判断此授权码有没有当前正在请求接口的权限(缓存中获取),有则放行,无则返回403Forbidden拦截。

4. URL防篡改支持

新增过滤器InterfaceTrSecurityFilter,优先级在和InterfaceAuthSecurityFilter之后,在work.lichong.interface.tr.open配置项值为1时,拦截对外接口,从header中获取urlmd5对应的值,再将请求URL进行MD5加密,两值对比一致即可放行,不一致则返回403Forbidden拦截。

5. 对系统SDK请求授权支持

接口授权管理数据库表中内置一条SDK使用的授权信息(接口授权管理页面应该过滤掉,用户不可见),接口白名单内仅有SDK使用到的接口,修改SDK中请求逻辑,将授权码和URLMD5加密值分别存入urlauthcodeurlmd5header中。

6. 数据库设计

字段名类型长度备注
C_IDVARCHAR50主键
C_ACCOUNTIDVARCHAR50创建人账号ID
C_NAMEVARCHAR100名称
C_URLSTEXT接口白名单(英文分号间隔)
C_AUTH_CODEVARCHAR100授权码
N_STATUSNUMERIC3是否启用(1-启用,2-暂停)
DT_CREATETIMETIMESTAMP6创建时间
DT_UPDATETIMETIMESTAMP6更新时间

7. 接口设计

略(都是增删改查,就不写了)

五、需要自己完善的内容

  1. 数据权限待完善,预留字段C_ACCOUNTID。目前默认管理员可见。
  2. 授权码生成算法

文章已收录至https://lichong.work,转载请注明原文链接。
ps:欢迎关注公众号“Fun肆编程”或添加我的私人微信交流经验🤝

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~往期精选🪶~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

【Docker】入门教程-基本概念解读
【前端-开发环境】使用NVM实现不同nodejs版本的自由切换(NVM完整安装使用手册)
【前端-NPM私服】内网使用verdaccio搭建私有npm服务器
【前端-IE兼容】Win10和Win11使用Edge调试前端兼容IE6、IE7、IE8、IE9、IE10、IE11问题
【前端-工程化】React项目工程化记录-内置项目活文档(老项目升级优化-集成Hosky/ESLint/Prettier-升级Webpack/Babel/NodeSass/React)
【工具-TWRP-frp-Termux】旧手机暴改成免费云服务器-MIUI刷TWRP安装magisk获取root
【工具-Shell脚本】java程序产品包模板-linux和windows通用shell启动停止脚本(无需系统安装Java运行环境)
【工具-Nginx】从入门安装到高可用集群搭建
【工具-Nginx】Nginx高性能通用配置文件-注释版-支持防刷限流、可控高并发、HTTP2、防XSS、Gzip、OCSP Stapling、负载、SSL
【工具-WireShark】网络HTTP抓包使用教程
【后端-maven打包】通过profile标签解决同时打jar包 war包需求
【架构-DDD】使用领域驱动设计-互联网未来架构设计之道(一)
【后端-SpringCache】基于Spring Cache封装一个能够批量操作的Redis缓存记录下踩坑历程(pipeline或mget封装)
【后端-SkyWalking】SkyWalking前后端开发环境搭建详细教程步骤-6.x/7.x/8.x版本通用-插件二次开发利器(一)
【后端-Quartz】Springboot整合Quartz支持集群环境-设计业务与框架分离及实现定时任务调度

✨欢迎为耿直少年点赞、关注、收藏!!!

👇👇👇

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fun肆编程

欢迎投喂

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值