什么是OAuth2

OAuth2 其实是一个关于授权的网络标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容。

PS:如果不能理解就想想你用微信/QQ登录CSDN的时候,你并不需要告诉CSDN你的QQ密码就能登录,是怎么实现的?其实采用OAuth2就可以实现

什么是Spring Security OAuth2

上面说了OAuth2是一个标准,而Spring Security基于这个标准进行了实现,这个实现就是Spring Security OAuth2。

OAuth2中的四种认证授权模式


  • 授权码模式(authorization code)
  • 简化模式/隐式授权模式(implicit)
  • 密码模式(password)
  • 客户端模式(client credentials)

我们以下举例用QQ登录CSDN来解释

授权码模式

Spring Security OAuth2 四种认证模式(含流程图)_客户端


  1. 用户访问页面CSDN并点击使用QQ登录
  2. CSDN将请求重定向到认证服务器(QQ)
  3. 认证服务器向用户展示授权页面,等待用户授权
  4. 用户授权,认证服务器生成一个code和带上client_id发给CSDN
  5. 应用服务器将code、client_id、client_secret传给认证服务器换取access_token和refresh_token
  6. 应用服务器用得到的access_token去访问QQ
  7. QQ去认证服务器验证Token的合法性,如果没问题就允许访问部分可控资源

这个模式的特点是流程复杂,多次通讯性能会有所降低,但是是比较安全的一种模式

简化模式/隐式授权模式

Spring Security OAuth2 四种认证模式(含流程图)_OAuth2四种认证模式_02

简化模式相对于授权码模式,少了获取code以及用code换token这一步,用户授权后,认证服务器直接返回CSDN一个token.

密码模式

Spring Security OAuth2 四种认证模式(含流程图)_spring_03

这个模式流程简单,但很不安全,一般用在强信任的两个系统,QQ和CSDN肯定不会采用这种方式,如果说能够通过QQ登录微信,或许会采用这种方式。

客户端模式

Spring Security OAuth2 四种认证模式(含流程图)_客户端_04

这个模式在很多内部系统之间验证会用,比如影像系统去接医院的HIS,需要拿到HIS的一些资源,比如获取用户历史的影像记录,但HIS又需要控制影像系统只能拿到部分允许的资源,比如控制影像系统只允许访问用户的影像记录,而不允许访问用户的手机号,家庭住址等信息。

HIS可能会给影像系统分配一个账号密码,这个账户密码HIS端会对允许请求的资源做权限控制。影像系统可以用这个账号密码来获取token,通过这个token去获取HIS允许请求的资源,之所以使用token而不直接使用账户密码还是为了安全考虑,token有过期机制,过期后需要使用账户密码重新获取token,很多时候这个重新获取的业务场景被称为签到

这种模式下,影像系统被称为HIS的一个客户端,所以这种模式叫客户端模式。

严格来说,客户端模式并不属于OAuth框架所要解决的问题。在这种模式中,已经与用户没有关系了,单纯的属于客户端以自己的名义要求"服务提供商"提供服务,其实不存在授权问题。

总结

本文主要介绍了Spring Security OAuth2的基本概念和四种认证模式,这四种认真模式各有优缺点,其中最常用的是授权码模式,客户端模式在某些系统中也会用到。​ ​一个Spring Security OAuth2的Demo​​

Spring Security和Spring Security OAuth2关系

Spring Security OAuth2是Spring Security的一个子项目,用于多系统之间的授权,比如你通过QQ登录CSDN就可以用Spring Security OAuth2实现,而Spring Security对标的是Shiro,可以做登录验证,URL权限验证。但Spring Security的功能比Shiro更加丰富,比如Spring Security支持Oauth,而Shiro需要自己实现。但同时Spring Security的配置相较于Shiro也更加繁琐,并且Spring Security不能脱离Spring运行。选型方面一般如果是传统的SSM项目就使用Shiro,如果是微服务项目就使用Spring Security。

参考

https://mp.weixin.qq.com/s?__biz=MzAxMjA0MDk2OA==&mid=2449469148&idx=1&sn=cf7f6f81134e8f43e6fc6a71e36f940a&scene=21#wechat_redirect

https://mp.weixin.qq.com/s/r3G8Te9f9uXSbf8YaUV6MA