关于API接口的签名和权鉴,你知道多少?
一、背景
最近在做第三方接口对接的一些工作,考虑到交互的安全性也为了不让数据在传输中裸奔,所以签名和权鉴是必不可少的了。二、关于API接口权鉴
2。1、从登录验证说起
在我们内部项目之间进行的接口调用中一般会用到这种:用户登录生成token并保存接口请求验证token,这里也可以把token做成全局的用以单点登录。
2。2、说说使用token验证
但是如果我们要对接第三方接口或者向第三方提供接口时,这个模式就使用得比较少一些了。首先,token携带在请求中很多时候已经是一个明文传输了,有心的话可以直接进行数据提取然后做一些其他事情(做过爬虫的应该都很熟练哈)。
在第三方接口对接时更多的是以加盟或绑定的形式为主,在接口调用之前很少会做登录的动作,而且处于安全性考虑这种方式的安全性也有待进一步提升。
2。3、解决方案
其实这个问题已经是有比较完备的解决方案了得:双方约定一个公钥,一个私钥然后按照特定的算法(MD5、SHA256)进行加密生成一个签名。使用方在接口调用时携带签名及其他数据,提供方在接收到调用时也按照约定进行一次签名的生成,最后会比较两方的数据,如果两方的签名一致则请求检测初步通过,不符合时则拒绝。三、我之项目解决方案
3。1、整体思路
使用特定的签名算法且使用双方都进行生成(其参数包含公钥、时间戳、携带参数)。在我这边接收到请求时先去检测公钥是否在我方的约定池中存在,然后校验签名一致性、有效时间,最后是参数合法性检测。其中在中间任何一个环节出现问题即抛出对应回执信息。
PS:部分参数可参与签名的算法
3。2、签名算法
在这里面最重要的就是签名算法了,其操作步骤如下:
使用Map接收参数,然后对按照其中的非空参数名的ACCII码从小到大进行排序
使用URL键值对的形式(key1value1key2value2。。。)进行字符串拼接
在上述生成的字符串上面拼接私钥得到新的字符串signStr,并对signStr进行SHA256运算得到signShsStr
最后把signShaStr转换成大写,得到最终的签名四、相关核心代码
4。1、signBuildUtilauthorXAdate202091014:11descriptionXXX签名业务操作实现paramsreturnComponentpublicclassSignBuildUtil{功能描述:签名生成Param:〔paramMap,secretKey〕Return:java。lang。StringpublicStringgenerateSign(MapString,StringparamMap,StringsecretKey){MapString,StringacsMapsortMapByKey(paramMap);StringBuildersbnewStringBuilder();for(Map。EntryString,Stringentry:acsMap。entrySet()){Stringkeyentry。getKey();Stringvalueentry。getValue();if(this。hasText(value)){sb。append(key)。append()。append(value)。append();}}sb。append(key)。append(secretKey);returnDigestUtils。sha256HexDigest(sb。toString())。toUpperCase();}功能描述:签名校验(接收入参和secrectKey本地生成一份进行数据比对)Param:〔dataMap,secretKey〕Return:booleanpublicbooleancheckSign(MapString,StringdataMap,StringsecretKey){MapString,StringtempMapnewTreeMap(dataMap);if(tempMap。containsKey(sign)){StringsigntempMap。remove(sign);StringcorrectSignthis。generateSign(tempMap,secretKey);returncorrectSign。equals(sign);}returnfalse;}功能描述:排序Param:〔map〕Return:java。util。Mapjava。lang。String,java。lang。StringprivatestaticMapString,StringsortMapByKey(MapString,Stringmap){if(mapnullmap。isEmpty()){returnnull;}MapString,StringsortMapnewTreeMap(newMapKeyComparator());sortMap。putAll(map);returnsortMap;}staticclassMapKeyComparatorimplementsComparatorString{Overridepublicintcompare(Stringstr1,Stringstr2){returnstr1。compareTo(str2);}}privatebooleanhasText(Stringstr){return(hasLength(str)containsText(str));}privatebooleancontainsText(CharSequencestr){intstrLenstr。length();for(inti0;istrLen;i){if(!Character。isWhitespace(str。charAt(i))){returntrue;}}returnfalse;}}
4。2、SHA256运算authorXAdate202091014:09description字符SHA256运算paramsreturnpublicclassDigestUtils{privatestaticfinalStringSHA256ALGORITHMNAMESHA256;privatestaticfinalchar〔〕HEXCHARS{0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f};publicstaticStringsha256HexDigest(Stringsource){try{MessageDigestmessageDigestMessageDigest。getInstance(SHA256ALGORITHMNAME);messageDigest。update(source。getBytes(UTF8));returnnewString(encodeHex(messageDigest。digest()));}catch(NoSuchAlgorithmExceptionUnsupportedEncodingExceptione){thrownewRuntimeException(e);}}privatestaticchar〔〕encodeHex(byte〔〕bytes){char〔〕charsnewchar〔bytes。length2〕;for(inti0;ichars。length;ii2){bytebbytes〔i2〕;chars〔i〕HEXCHARS〔(b0x4)0xf〕;chars〔i1〕HEXCHARS〔b0xf〕;}returnchars;}}
五、后记
5。1、在签名中可以让部分重要的参数进行参与
5。2、使用时间戳并参与签名一方面是增加签名的预测难度也可以作为时间有效性检测的依据
5。3、最好是有一个良好的文档约定和公钥、私钥的良好维护
华为成4G的了,荣耀也没有性价比了,你会选择小米吗?手机品牌不是只有华为,荣耀和小米,如果你需要购买高端手机还有苹果和三星,这两家的高端手一点也不比华为差,如果你需要购买高性价比的机器,还有iQOO和Realme这些品牌,除了上……
用聚精会神来造句聚精会神造句1、只有聚精会神地做事,才能取得更好的结果2、大声地朗读剧本,可以或多或少地了解各种各样人物,变得生动有趣还需要一定的聚精会神才行。3、孩子们聚精……
三星GalaxyZFold3及智能生态新品你还会选择吗?5G时代手机已经不仅仅是智能通讯设备,它在扮演多个角色的同时,还是构建更多智能设备互联的纽带。在生态体验布局中,三星Galaxy生态产品的综合设计逐渐完善,其最新发布的三星Ga……
网评让电子商务成为富民兴藏新引擎近年来,随着互联网的快速发展和数字经济的迅速兴起,作为新兴业态的电子商务蓬勃发展,与一二三产业加速融合,全面促进产业链、供应链数字化改造,成为助力传统产业转型升级和乡村振兴的重……
大班语言说课稿范文导语:说课稿可以体现教师理论素养和驾驭教材的能力,同时体现教师的语言表达能力。以下是小编整理的大班语言《梦》说课稿,欢迎各位阅读与关注。大班语言《梦》说课稿说教材分……
第四节ampnbspampnbsp基因是有遗传效应的DNA片第四节基因是有遗传效应的dna片段〔一〕教学程序导言复习提问:1。从分子角度分析为什么亲代和子代在性状上相似?学生回忆回答:因亲代把自己的dna分……
灯塔教学反思范文《灯塔》这篇通话讲的是大海上的一座灯塔日夜为航海的船只盗航,得到船只和海鸥的欢迎,却也遭到狂风暴雨和闪电雷鸣,可它毫无畏惧,依然坚定地履行自己的职责。第二天黎明,他告诉海鸥它之……
北史魏德深传的阅读答案解析及原文翻译阅读下面的文言文,完成810题。魏德深,本巨鹿人也。祖冲,仕周,为刑部大夫、建州刺史,因家弘农。父毗,郁林令。德深初为隋文帝挽郎,后历冯翊书佐、武阳郡司户,书佐,以能迁贵……
廉颇蔺相如列传优秀说课稿一、说教材本文选自高一语文必修第四单元。作为《史记》中著名的人物传记,其重要的历史价值在于,以完璧归赵、渑池之会、负荆请罪三个典型故事浓缩了战国末期秦赵之间得政治斗争,以……
狼和小羊的语文教学反思范文在教学本课时,我让学生围绕这是一只怎样的狼?怎样的小羊?读课文,找出有关句子读一读。并且找出根据。这一专题各自发表自己的想法和看法,进行专题漫谈。学生围绕专题漫谈,从句子本身的……
二年级语文树之歌教学反思范文《树之歌》这篇儿歌,让我们认识了11种树木,了解这些树木的特点,并在潜移默化中激发学生了解、观察大自然的兴趣。下面我们来看看二年级语文树之歌教学反思范文,欢迎阅读借鉴。二年级语……
芙蕖阅读理解答案芙蕖之可人,其事不一而足,请备述之。群葩当令时,只在花开之数日,前此后此皆属过而不问之秋矣。芙蕖则不然:自荷钱出水之日,便为点缀绿波;及其茎叶既生,则又日高日上,日上日妍……
小指甲变了二年级教学反思片断:整体感知,自学课文。小指甲发生了什么变化?为什么会有这样的变化?让我们带着这两个问题一起听听故事录音,边听边思考。集体交流;1、小指甲发生了什么变……
负荆请罪优秀教学设计范文一、教学要求1、学会本课生字,理解由生字组成的词语。联系课文内容,说说负荆请罪这个成语的由来。2、通过朗读理解剧本语言,体会廉颇知错就改及蔺相如顾全大局的品质。……
第四单元有余数的除法教案有余数的除法(二)教学内容:教材P50P51上的内容。和P53练习十二第1、2题。教学目标:使学生会用口算和笔算计算有余数除法。教学重点:1……
第七课第三节第三框在奋斗中实现理想第七课第三节第三框在奋斗中实现理想【教学目标】1知识与技能:理解理想与现实的关系,明确艰苦奋斗精神的内涵,会对照社会存在和社会意识的辩证关系原理来认识现实与理想的关……
北师大版一年级上册浪娃娃的教学设计教学目标:、学会个生字,认识建字底;读写应该等个词语,会用应该写句子。、会把句子补充完整。、能有感情地朗读课文。、初步懂得人们可以利用海浪来推动发电机发……
用娴静造句娴静拼音【注音】:xianjing娴静解释【意思】:文雅安详。娴静造句1、它简单朴素却又不失精致;它娴静端庄却又性感十足。2、真奇异,她竟这……
吕氏春秋顺民阅读答案越王苦会稽之耻,欲深得民心,以致必死于吴,身不安枕席,口不甘厚味,目不视靡曼,耳不听钟鼓。三年苦心劳力,焦唇干肺,内亲群臣,下养百姓,以来其心。有甘肥,不足分,弗敢食;有酒,流……
工业的发展教案示例1教案示例1P工业的发展第一课时【教学重点】中国工业的巨大发展【教学难点】中国的工业布局【教学用具】中国工业分布变化图,中国工业发展景观图片【教学过……
一片梨树林阅读及答案(片断一):白色梨花开满枝头,多么美丽的一片梨树林啊!老余说:这里有梨树,前边就会有人家。一弯新月升起了,我们借助淡淡的目光,在忽明忽暗的梨树林里走着。山间的夜风吹得人脸上凉凉……
海底世界的第二课时教学设计设计理念:语文是充满情趣的学科。生动的内容,鲜活的文字,精美的插图,为我们优化教学过程,追求鲜活有趣提供了很好的条件。《海底世界》说的是海底的景色奇异,物产丰富。这……
幼儿园小班折纸教案手是思想的镜子,是智力才能发展的刺激物,所以我们作为一个幼儿园的老师,需要提升孩子的动手能力,我们看看下面的幼儿园小班折纸教案吧!幼儿园小班折纸教案教材分析:心灵手……
材料的压缩与扩展教学目标:1、使学生掌握压缩与扩展的方法;2、让学生掌握高考相关题型,进一步理解压缩与扩展的试题特点及解题思路。教学难点:1、摘要和提要的异同;2、强化……