OAuth2:中间人攻击?不存在的 中间人攻击的主要原理是攻击者通过伪装将自己置于两个端的通信网络中,形成一个“中转站”,其主要攻击方式是对通信信息的窃取与篡改。那么OAuth2如何规避这种风险呢? 浏览器端使用的是OAuth2授权码流程,这种流程中最主要的通信发生在第三方应用的服务端与授权服务器之间,这就可以保证这部分通信是不会被攻击者窃取的。但是除了应用服务器到授权服务器通信,还有应用的客户端与服务端之间的通信,而这部分通信可能就会被,比如用户手机自动连接上的免费wifi,监听。这里OAuth2所采用的防御措施就是只有类似于授权码这种不可靠信息(可以默认其已经被篡改)才会在服务器和客户端之间传输。 但是在这个过程中,还是暴露了授权码。那么OAuth2又是通过什么方法来保证中间人不会拿着授权码来换取令牌呢? 这就要说到授权码的三个特点 1. 短时效:规范中规定了最长不超过10分钟,大部分的应用一般使用30-60秒 2. 一次性:只能使用一次 3. 耦合性:授权码无法单独使用,client_id和服务器端密钥联合授权码使用 回到中间攻击者的场景,由于是中间人,所以其必定比客户端早拿到授权码。拿到了授权码之后又分两种场景: 1. 如果攻击者没有使用该授权码而直接将其转给了客户端,那么由于授权码只能使用一次的特性,攻击者必然无法重复使用因此攻击失败。 2. 如果攻击者使用了授权码,并且没有返回授权码给客户端,那么很快客户端就能发现异常。如果中间人将使用后的授权码或伪造的授权码传递给客户端,那么当客户端也会因为授权失败发现异常。同时,即使中间人拿到了授权码,因为需要和服务器端密钥和client_id联合使用,因此中间人还是无法完成攻击。
