舒服!老板连夜夸我Controller写得优雅

在实际工作中,我们需要经常跟第三方平台打交道,可能会对接第三方平台Controller接口,或者提供Controller接口给第三方平台调用。

那么问题来了,如果设计一个优雅的Controller接口,能够满足:安全性、可重复调用、稳定性、好定位问题等多方面需求?

今天跟大家一起聊聊设计Controller接口时,需要注意的一些地方,希望对你会有所帮助。

为了防止Controller接口中的数据被篡改,很多时候我们需要对Controller接口做签名。

接口请求方将请求参数 + 时间戳 + 密钥拼接成一个字符串,然后通过md5等hash算法,生成一个前面sign。

然后在请求参数或者请求头中,增加sign参数,传递给API接口。

API接口的网关服务,获取到该sign值,然后用相同的请求参数 + 时间戳 + 密钥拼接成一个字符串,用相同的m5算法生成另外一个sign,对比两个sign值是否相等。

如果两个sign相等,则认为是有效请求,API接口的网关服务会将给请求转发给相应的业务系统。

如果两个sign不相等,则API接口的网关服务会直接返回签名错误。

问题来了:签名中为什么要加时间戳?

答:为了安全性考虑,防止同一次请求被反复利用,增加了密钥没破解的可能性,我们必须要对每次请求都设置一个合理的过期时间,比如:15分钟。

这样一次请求,在15分钟之内是有效的,超过15分钟,API接口的网关服务会返回超过有效期的异常提示。

目前生成签名中的密钥有两种形式:

一种是双方约定一个固定值privateKey。

另一种是API接口提供方给出AK/SK两个值,双方约定用SK作为签名中的密钥。AK接口调用方作为header中的accessKey传递给API接口提供方,这样API接口提供方可以根据AK获取到SK,而生成新的sgin。

全部评论

相关推荐

面试官人很好,非常随和,不会的问题也不会强行让你答,而是自己给出答案-----------------------先是项目拷打---------------------项目基本模块,怎么设计的,采用什么架构(单体/微服务)库存扣减逻辑,分布式事物(拷打的很深,提了很多场景,比如redis宕机怎么办?rabbitmq宕机怎么办?消息没发送或丢失怎么办?最终兜底用什么,这里是用本地事物表兜底)redis和mysql数据一致性,强一致和最终一致性怎么保证数据库优化做了哪些,sql优化呢----------------------然后是八股拷打--------------------sql语句在mysql中怎么流转的(应该是优化器,编译器,连接器,还有redolog,undolog,binlog保存之类的,没答出来,只答了一个redolog和binlog两段式提交)多线程参数,如果不想任务放阻塞队列而是直接由空闲线程执行怎么办,用什么类型的队列(这个真不会)redis常用哪些数据类型,用来做什么,zset底层数据结构hashmap底层结构,put过程以及扩容过程缓存三兄弟,布隆过滤器会带来哪些坏处(有误判且数据增删改时需要更新布隆过滤器),布隆过滤器怎么更新的--------最后是计网题目(没怎么看,答的都很烂)-------tcp如何保证连接稳定进程服务算法看我不怎么会,直接就上算法了重排链表,leetcode hot100原题---------------------我的回合反问----------------------主要做什么:答负责电影票和演出,电影票北京,演出上海,业务涉及高并发,金融工作时间:答早10晚7,8左右转正:需要实习6个月转正(怎么都这样啊啊啊,为什么没有包转正的呢?)工资:答找hr面试结果什么时候出:快的话3天左右面试官最后说感谢你的参与,这个感谢说的我好怕啊,不会要挂吧
查看11道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务