接口要进行安全设计,首先要理解接口交互过程。
假设A和B是交互双方,A为请求方,B为授权方,那么交互过程是这样的:
A ——> 请求——>B
A<——响应<——B
无论是哪个过程,其实都涉及传输过程。接口的安全设计,重点就是确保传输过程的安全。那么,安全是指什么?
1、A的数据包原封不动地传输到B;
2、若有必要,希望A的数据包不会被剽窃。
针对1,本质是一致性问题,就是发出的东西和收到的东西保持一致;
针对2,本质是加密问题,就是不希望明文传输,而是密文传输。
因此:
针对1出现了各种一致性算法,就是俗话说的数字签名算法。如果说传输的数据好比是一封信,那么签名就是信封。有了信封,里面的东西就不会被人篡改。那么,充当信封的角色就是各种签名算法(也可以自创,不一定要使用网络流行算法),比如MD5、SHA-1、SHA2、HMAC等等都可以充当签名角色,确保传输一致性,只是安全级别不同而已。签名,顾名思义就是增加一个签名,原文还是需要传输的。接收端收到原文后,用同样的签名算法对原文进行运算,得到一个期待的签名,然后跟传输过来的签名做一个匹配(即签名验证),匹配得上则说明原文的一致性可信。注意,原文不一定是所有报文内容,也可以是某些敏感字段而已,关键看想保护哪些信息。签名算法一般是不可逆的运算,就是不能从签名逆向解出原文,因为很多签名算法本身就是一种消息摘要方式存在。
针对2