SpringCloud+MySql+Redis+ES+security选型-security(三)

作者:青山常在人不老   阅读 (1520)  |  收藏 (0)  |  点赞 (0)

摘要

本文将会讲述SpringCloud 整合security和oauth2的权限控制,同时简单分析微服务中权限控制的原理。


原文链接:SpringCloud+MySql+Redis+ES+security选型-security(三)

在我们传统的但应用开发的过程中,如果一个公司/组织有多个产品提供出来,那么他们通常会做一个单点登录应用,来统一管理其他的应用的用户和权限,在这个单点登录应用中,会连接着后端用户数据库。当用户访问应用服务器时,会通过应用的拦截器进行拦截鉴权,如果鉴权登录成功,通常由服务器发给客户端一个会话标识Session ID,客户端将Session ID存储在Cookie中,服务器记录Session ID与经过验证的用户的对应关系。

以下为传统应用的权限控制应用架构:

Spring Cloud 整合 security 和 oauth2 分析

相对而言,传统单块应用主要是直接面向PC用户的Web应用,对于现代微服务架构而言,上面的做法就不适用了。对于现代微服务架构而言,服务之间拆分的粒度较小,需要考虑服务和服务之间的鉴权问题,另外就是应用的形态变得多种多样,例如有单页应用,无线原生APP,服务端APP。这种场景下我们通常会设计一个独立的服务,将认证和授权都做成一个AuthServer,通过Token的形式进行鉴权和授权,那么这也是OAuth2解决的一个主要问题,我们将在后面进行介绍。

标准的现代微服务架构如下:

Spring Cloud 整合 security 和 oauth2 分析

OAuth 2.0是用于授权的行业标准协议。OAuth 2.0着眼于简化客户端开发人员,同时为Web应用程序,桌面应用程序,移动电话和客厅设备提供特定的授权流程。它是用于REST/APIs的代理授权框架(delegated authorization framework),它基于令牌Token的授权,在无需暴露用户密码的情况下,使应用能获取对用户数据的有限访问权限。Oauth2.0能将认证和授权解耦,它是一个标准的安全框架,在应用程序方面支持多种应用场景,除了上面说到的服务端WebApp,还包括浏览器单页应用SPA,无线/原生App,服务器对服务器之间调用等等。

在Spring Boot和Spring Security OAuth2的基础上,我们可以快速创建实现常见模式(如单点登录,令牌中继和令牌交换)的系统。

事实上,oauth2 有很多的优点:

  1. 客户端不接触用户密码,服务端更易集中保护

  2. 广泛传播并被持续采用

  3. 支持短寿命和封装的Token

  4. 资源服务器和授权服务器解耦

  5. 集中式授权,简化客户端

  6. HTTP/JSON友好,易于请求和传递Token

  7. 考虑多种客户端架构场景

  8. 客户端可以具有不同的信任级别

当然,它的缺陷也是有滴:

  1. 协议框架太宽泛,造成各种实现的兼容性和互操作性差

  2. 和OAuth1.0不兼容

在使用过程中,我们需要注意的是:

  1. OAuth并没有支持HTTP以外的协议。

  2. OAuth并不是一个认证协议。

  3. OAuth并没有定义授权处理机制。

  4. OAuth并没有定义Token类型。

  5. OAuth2.0并没有定义加密方法。

  6. OAuth2.0并不是单个协议。

  7. OAuth2.0仅是授权框架,仅用于授权代理。


分类   Spring boot 开发
字数   1164

博客标签    SpringCloud security   SpringCloud oauth2分析  

评论