[编程思想进行曲]passport组件之league/oauth2-server项目的设计思想整理

1.前言

这个系列会以UML的方式整理一些热门开源项目的设计思想,第一个项目我们以Laravel框架官方提供的 passport 组件为例。passport主要提供了oauth所涉及的全面问题的解决方案,其中league/oauth2-server是passport组件中处理oauth2.0相关问题的子组件包,下面我们来看下它的结构。

2.介绍

关于oauth1.0,2.0的问题,这里有一篇前置文章作为介绍。league/oauth2-server项目是在RFC6749的标准上进行的设计,所以在编码前,对业务的熟悉非常重要,这样我们才能很好的多维拆分业务从而进行编码的设计工作。其中涉及到的网络数据的传输,league/oauth2-server使用到了jwt的解决方案,什么是jwt?可以参考这里

3.业务流程

oauth2.0中的业务流程如下图所示:

图一
图二

图一展示了oauth2.0的基本业务流程,而图二则是基于认证码的授权流程。授权的种类除了认证码以外还有:密码授权、隐式授权、客户端凭证授权、刷新令牌授权等。图一中,我们看到处理业务的有三种角色:1.资源拥有者、2.认证服务、3.资源服务。

3.1角色的功能

资源拥有者:

拥有资源的用户

认证服务:

1.生成第一阶段的授权码

2.验证第一阶段的授权码

3.颁发访问资源服务的令牌

资源服务:

1.验证访问令牌

2.提供资源访问

4.设计思想

4.1业务相关的实体内容

上面的业务流程中,依赖以下组成单元:令牌、客户、授权码、令牌范围等。

4.1.1业务实体对应的类抽象模型

作者把实体依赖单元抽象水平垂直拆分成了多个实体接口,通过php特有的trait特性,把相关接口对应的方法从接口中解耦了出来,这让我们对接口的方法可以快速的使用或者重写。

4.1.2实体模型对应管理仓库

有了实体模型,项目作者又设计了实体模型对应的实体仓库,用于管理实体的生命周期。

4.2授权方式

上面提到的授权方式分为: 密码授权、隐式授权、客户端凭证授权、刷新令牌授权 等。因此项目作者把授权方式的功能也进行了相应的拆分,如下图所示:

4.3认证服务的设计

通过上面的拆分,最后通过依赖的手段把各个部分注入认证服务中,如下图所示:

4.4资源服务的设计

资源服务主要功能是对令牌的认证,如下图所示:

5.收获

项目作者对业务流程中所涉及的最小执行单元进行了详细的拆分设计,通过entities和repositories的组合让执行单元与功能更具低耦合性,最后通过依赖的方式注入相关的业务场景中。

6.参考地址

官方地址

https://oauth2.thephpleague.com/

如无特殊说明,文章均为本站原创,转载请注明出处。如发现有什么不对的地方,希望得到您的指点。

发表评论

电子邮件地址不会被公开。 必填项已用*标注