为知名品牌客户提供礼品包定制服务
股票代码:837115
您的位置: 首页 > 新闻中心

SpringBoot 接口签名算法代码规划

日期: 2023-11/28 16:52:06
作者: 新闻中心

  敞开接口是指不需求登录凭据就答应被第三方体系调用的接口。为防止敞开接口被歹意调用,敞开接口一般都需求验签才干被调用。供给敞开接口的体系下面一致简称为原体系。

  验签是指第三方体系在调用接口之前,需求依照原体系的规矩依据一切恳求参数生成一个签名(字符串),在调用接口时带着该签名。原体系会验证签名的有用性,只要签名验证有用才干正常调用接口,不然恳求会被驳回。

  第三方体系作为调用方,需求与原体系洽谈约好签名算法(下面以SHA256withRSA签名算法为例)。一起约好一个称号(callerID),以便在原体系中来仅有标识调用方体系。

  签名算法约好后之后,原体系会为每一个调用方体系专门生成一个专属的非对称密钥对(RSA密钥对)。私钥颁发给调用方体系,公钥由原体系持有。

  留意,调用方体系需求保管好私钥(存到调用方体系的后端)。因为关于原体系而言,调用方体系是音讯的发送方,其持有的私钥仅有标识了它的身份是原体系受信赖的调用方。调用方体系的私钥一旦走漏,调用方对原体系毫无信赖可言。

  为了保证生成签名的处理细节与原体系的验签逻辑是匹配的,原体系一般都供给jar包或许代码片段给调用方来生成签名,不然可能会因为一些处理细节不一致导致生成的签名是无效的。

  途径参数中放入约好好的callerID,恳求头中放入调用方自己生成的签名

  相关的自定义yml装备如下。RSA的公钥和私钥能够正常的运用hutool的SecureUtil东西类来生成,留意公钥和私钥是base64编码后的字符串

  留意,生成的签名是将字节数组进行十六进制编码后的字符串,验签时需求将签名字符串进行十六进制解码成字节数组

  有些接口需求验签,但有些接口并不是特别需求,为了灵敏操控哪些接口需求验签,自定义一个验签注解

  验签逻辑不能放在中,因为中不能直接读取body的输入流,不然会形成后续@RequestBody的参数解析器读取不到body。

  因为body输入流只能读取一次,因而就需求运用ContentCachingRequestWrapper包装恳求,缓存body内容(见第5点),可是该类的缓存机遇是在@RequestBody的参数解析器中。

  读取body缓存的机遇必须在@RequestBody的参数解析之后,比如说:AOP、Controller层的逻辑内。留意的机遇是在参数解析之前的

  处理计划便是包装恳求,缓存恳求体。SpringBoot也供给了ContentCachingRequestWrapper来处理这一个问题。可是第4点中也详细描述了,因为它的缓存机遇,所以它的运用有约束条件。也能够学习网上的计划,自己完成一个恳求的包装类来缓存恳求体