SpringSecurityOAuth2四种认证模式(含流程图)
什么是OAuth2
OAuth2 其实是⼀个关于授权的⽹络标准,允许⽤户授权第三⽅移动应⽤访问他们存储在另外的服务提供者上的信息,⽽不需要将⽤户名和密码提供给第三⽅移动应⽤或分享他们数据的所有内容。
PS:如果不能理解就想想你⽤/QQ登录CSDN的时候,你并不需要告诉CSDN你的QQ密码就能登录,是怎么实现的?其实采⽤OAuth2就可以实现
什么是Spring Security OAuth2
上⾯说了OAuth2是⼀个标准,⽽Spring Security基于这个标准进⾏了实现,这个实现就是Spring Security OAuth2。
OAuth2中的四种认证授权模式
授权码模式(authorization code)
简化模式/隐式授权模式(implicit)
shiro安全框架密码模式(password)
客户端模式(client credentials)
我们以下举例⽤QQ登录CSDN来解释
授权码模式
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的合法性,如果没问题就允许访问部分可控资源
这个模式的特点是流程复杂,多次通讯性能会有所降低,但是是⽐较安全的⼀种模式
简化模式/隐式授权模式
简化模式相对于授权码模式,少了获取code以及⽤code换token这⼀步,⽤户授权后,认证服务器直接返回CSDN⼀个token.
密码模式
这个模式流程简单,但很不安全,⼀般⽤在强信任的两个系统,QQ和CSDN肯定不会采⽤这种⽅式,如果说能够通过QQ登录,或许会采⽤这种⽅式。
客户端模式
这个模式在很多内部系统之间验证会⽤,⽐如影像系统去接医院的HIS,需要拿到HIS的⼀些资源,⽐如获取⽤户历史的影像记录,但HIS⼜需要控制影像系统只能拿到部分允许的资源,⽐如控制影像系统只允许访问⽤户的影像记录,⽽不允许访问⽤户的⼿机号,家庭住址等信息。
HIS可能会给影像系统分配⼀个账号密码,这个账户密码HIS端会对允许请求的资源做权限控制。影像系统可以⽤这个账号密码来获取token,通过这个token去获取HIS允许请求的资源,之所以使⽤token⽽不直接使⽤账户密码还是为了安全考虑,token有过期机制,过期后需要使⽤账户密码重新获取token,很多时候这个重新获取的业务场景被称为签到。
这种模式下,影像系统被称为HIS的⼀个客户端,所以这种模式叫客户端模式。
严格来说,客户端模式并不属于OAuth框架所要解决的问题。在这种模式中,已经与⽤户没有关系了,单纯的属于客户端以⾃⼰的名义要求"服务提供商"提供服务,其实不存在授权问题。
总结
本⽂主要介绍了Spring Security OAuth2的基本概念和四种认证模式,这四种认真模式各有优缺点,其中最常⽤的是授权码模式,客户端模式在某些系统中也会⽤到。
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。
参考

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。