孩子们眼中的希望是什么形状,是否院子有秋千可以荡,口袋里有糖。
一、说点题外话
前面几个章节我们已经对Spring Security的源码进行了基本的剖析了,不能说面面俱到,但是基本原理大概已经了解了。Spring Security功能强大、扩展性强,但是理解起来确实是不容易的,总是有得有失。如果只是为了能够使用,那么各种集成到项目里的教程都很多,大家跟着教程相信可以很快的将Spring Security集成到自己的项目中;当然如果想跟深入的学习其中的原理,借鉴其中优秀的设计以及实现方式等等,那么大家在学习的过程中就不能急于求成,还是需要静下心来,毕竟优秀的东西都是一批人很长时间的心血,当然不可能是简单的,所以希望大家在学习任何东西的时候都抱有一颗敬畏之心,同时也要抱有一个谦逊的态度。
二、OAUTH
本章开始,我们开始讨论Spring Security中我们使用频率也很高的Oauth。
2.1 概念
Oauth是open authorization开放授权的意思,直白点就是开放标准的授权框架或者协议,所以它提供的是一套开放的授权标准,而我们要学习的都是基于Oauth2的标准实现的一套框架。
详细的内容大家可以参考:
https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-1-07#name-introduction-4
我们这里不展开详细说明,仅聊一下oauth中的角色、协议流、授权模式这几个方面。
2.2 oauth中的角色
oauth中定义了4个角色:
resource owner(资源所有者):能够授予访问被保护资源权限的实体,比如我们都有微信,我们的微信中有非常多的只属于我们自己的数据,这些数据就是资源,而我们每个人就是这些数据资源的所有者;
resource server(资源服务器):能够托管受保护资源的服务器;比如我们的微信的数据资源存储在微信的服务器上,那微信的服务器就是资源服务器;
client(客户端): 代表资源所有者并在其授权下发起对受保护资源访问请求的应用程序,比如CSDN登录可以选微信登录,那么CSDN就是客户端,它需要从微信获取到一些受保护的资源来登录;
authorization server(授权服务器):成功认证资源所有者并获取授权后向客户端颁发令牌的服务器;比如CSDN选择微信登录后,在资源所有者确认后会向微信的授权服务器进行验证和授权。
2.3 协议流
我们看完了oauth中定义的四种角色后,那么这四个角色在一次完整的请求流转中的所发挥的作用,看下官方的图:
结合我们上面说的四种角色看上图,首先CSDN应用程序(client)登录时选择微信登录就是上图中的1,然后页面弹窗让你(Resource Owner)确认是否确认,点击确认就是2,随后向微信的授权服务器(Authorization Server)发送授权请求就是3,微信的授权服务器验证通过并获取授权后返回访问token就是4,最后CSDN携带token访问微信资源服务器(Resoucre Server)就是5,微信资源服务器验证token通过后返回登录所需的信息就是6,CSDN拿到这些信息再完成登录。
以上就是oauth的一个抽象的协议流程,更加详细的流程会更加复杂一些,根据选择不同的授权方式其中实现流程也会不同,我们后面结合Spring Security的oauth实现方式再详细讲解。
2.4 授权模式
最后我们再简单聊下oauth2的授权模式,授权模式,即是向授权服务器获取授权的方式,这很好理解,生活中无论我们要达成一个什么目的,都会有不同的方式,每一种方式有每一种方式的优缺点,而我们要做的就是在不同情境下综合比较选出最适合的方式。因此oauth2的不同授权模式就产生了,像Authorization Code模式、Refresh Token模式、Client Credentials模式等等,同样的具体的授权模式我们还是在Spring Security的实现中去看。
本章节的内容就聊到这里,下章我们开始讨论Spring是如何基于Oauth2的协议来实现的授权框架的。
未完待续~