皆非的万事屋

分布式系统认证方案

分布式系统认证

随着软件环境和需求的变化,软件的架构通常都会由单体结构演变成具有分布式架构的分布式系统。而分布式系统的每个服务都会有认证、授权的需求。如果每个服务都实现一套认证洛基,就会非常冗余且并不现实。而针对分布式系统的特点,一般就会需要一套独立的第三方系统来提供统一的授权认证服务。

分布式系统认证需求分析

分布式系统认证的需求总结如下
[scode type="blue"]统一认证授权[/scode]

[scode type="blue"]多样的认证场景[/scode]

[scode type="blue"]应用接入认证[/scode]

分布式认证方案

分布式环境下的认证方案主要有基于session和基于Token两种方案。

基于Session的认证方式:

这种方式依然是由服务端保存统一的用户信息。只是在分布式环境下,将Session信息同步到各个服务中,并对请求进行负载均衡。

这种方案下,通常有一下几种做法:

总体来讲,基于Session认证的方式,可以更好的在服务端对会话进行控制,且安全性较高。但是,session机制总体是基于cookie的,客户端要保存sessionid,这在复杂多样的客户端上不能有效的使用。另外随着系统的扩展提高session的复制、黏贴、存储的容错性。

基于Token的认证方式

基于Token的认证方式,服务端不再存储认证数据,易维护,扩展性强。客户端可以把Token存在任意地方,并且可以实现web和app统一认证机制。其缺点也很明显,客户端信息容易泄露,token由于包含了大量信息,因此一般数据量较大,而且每次请求都需要传递,因此比较占带宽。另外,token的签名延签操作也会带来额外的负担。

方案选项

OAuth2.0

概念

OAuth2.0流程示例

OAuth2.0协议

Spring Security OAuth2.0

环境介绍

UAA核心三个配置

测试

客户端模式 client_credentials:

密码模式

简化模式 implicit

授权码模式 authorization_code

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »