分布式认证方案
选型分析
1.基于session的认证方式
-
在分布式的环境下,基于session的认证出现一个问题,每个应用服务都需要在session中存储用户身份信息,通过负载均衡将本地的请求分配到另一个应用服务需要将session信息带过去,否则重新认证。
- 这个时候,通常的做法有下面几种:
- Session复制:多台应用之间同步session,使session保持一致,对外透明。
- Session黏贴:当用户访问集群中某台服务器后,强制指定后续所有请求均落到此机器上。
- Session集中存储:将Session存入分布式缓存中,所有服务器应用实例统一从分布式缓存中存取Session。
- 总体来讲,基于session认证的认证方式,可以更好的在服务器对会话进行控制,且安全性较高。但是,session机制方式基于cookie,在复杂多样的移动客户端上不能有效的使用,并且无法跨越,另外随着系统的扩展需提高session的复制,黏贴及存储的容错性。
2.基于token的认证方式
-
基于token的认证方式,服务端不用存储认证数据,易维护扩展性强,客户端可以把token存在任意地方,并且可以实现web和app统一认证机制。其缺点也很明显,token由于包含信息,因此一般数据量较大,并且每次请求都需要传递,因此比较占带宽。另外,token的签名操作也会给cpu带来额外的处理负担。
技术方案
- 根据选型分析,决定采用基于token的认证方式,它的优点使:
- 1.适合统一认证的机制,客户端,一方应用,三方应用都遵循一致的认证机制。
- 2.token认证方式对第三方应用接入更合适,因为它更开放,可使用当前有流行的开放协议Oauth2.0,JWT等。
- 3.一般情况服务端无需存储会话信息,减轻了服务端的压力。
-
分布式系统认证技术方案见下图: