皆非的万事屋

【分布式认证系统】OAuth2.0标准、SpringSecurity与SpringSecurityOAuth2之间的区别与联系

这篇文章和之前那篇分布式认证系统大同小异,本篇内容是分享的成稿

分布式系统认证

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

分布式系统认证需求分析

分布式系统认证的需求总结如下

统一认证授权

多样的认证场景

应用接入认证

分布式认证方案

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

基于Session的认证方式:

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

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

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

基于Token的认证方式

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

方案选择

OAuth2.0

概念

Spring Security OAuth2.0

环境介绍

问题: 有SpringSecurity了为什么还要SpringSecurityOAuth2.0,同样是认证与授权,SpringSecurity不能实现OAuth2.0协议吗



OAuth2.0流程示例

OAuth2.0官方流程图

UAA核心三个配置

测试

客户端模式 client_credentials:

密码模式

简化模式 implicit

授权码模式 authorization_code

名词

OAuth 2.0

OAuth(开放授权)是一个开放标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方应用或分享他们数据的所有内容。OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth1.0即完全废止了OAuth1.0。很多大公司如Google,Yahoo,Microsoft等都提供了OAUTH认证服务,这些都足以说明OAUTH标准逐渐成为开放资源授权的标准。

OAuth协议目前发展到2.0版本,1.0版本过于复杂,2.0版本已得到广泛的应用。

Token

令牌,客户端访问服务资源的凭证

JWT

Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

SpringSecurity

Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架。它是保护基于 Spring 的应用程序的事实上的标准。

Spring Security 是一个专注于为 Java 应用程序提供身份验证和授权的框架。与所有 Spring 项目一样,Spring Security 的真正强大之处在于它可以轻松扩展以满足自定义要求。特征:

SpringSecurityOAuth2

OAuth是一个开放的授权标准,而Spring Security OAuth2是对OAuth2协议的一种实现框架。

RBAC

RBAC 是基于角色的访问控制(Role-Based Access Control ),是一个权限设计模型,在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理起来很方便。

设计数据库表的设计,Security中认证流程的设计。

视频讲解

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