权限模块设计

「这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战」。

1 什么是OpenID、OAuth

::: tip 说明
无论是Web端还是移动端,现在第三方应用账户登录已经成为了标配,任意打开个网站都可以看到,QQ/微信账号登录的字样。使用第三方账户的登录的过程,既要限制用户身份只让有效注册用户才能登录,还要根据注册用户的不同身份来控制能浏览的内容,这就需要认证和授权
:::

  • OpenID:Authentication 认证 ---->验证用户账号密码是否正确
  • OAuth :Authorization 授权 ----> 先进行OpenID验证,通过后再根据不同用户来控制用户的功能权限

2 OAuth四种授权模式

::: tip 授权模式
OAuth:比如用户在QQ授权页面输入QQ的账号和密码,QQ验证成功之后,返回 access_token,然后自身系统拿到 access_token 之后,再去请求QQ的用户 API,QQ授权中心验证 access_token,如果验证通过,则返回用户 API 的请求数据给自身的系统。
:::

2.1 授权码模式

授权码模式(authorization code)是功能最完整、流程最严密的授权模式,code保证了token的安全性,即使code被拦截,由于没有app_secret,也是无法通过code获得token的。

2.1.1 角色行为与功能

  • 资源所有者

只需要允许或拒绝第三方应用获得授权

  • 第三方应用

申请成为资源服务器的第三方应用

获取资源服务器提供的资源

  • 授权服务器

提供授权许可code、令牌token等

  • 资源服务器

提供给第三方应用注册接口,需要提供给第三方应用app_id和app_secret

提供给第三方应用开放资源的接口

2.2 隐式授权模式/简化模式

和授权码模式类似,只不过少了获取code的步骤,是直接获取令牌token的,适用于公开的浏览器单页应用,令牌直接从授权服务器返回,不支持刷新令牌,且没有code安全保证,令牌容易因为被拦截窃听而泄露。

2.3 密码模式

使用用户名/密码作为授权方式从授权服务器上获取令牌,一般不支持刷新令牌。

2.4 客户端凭证模式

一般用于资源服务器是应用的一个后端模块,客户端向认证服务器验证身份来获取令牌。

image.png

3 具体表结构说明

3.1 tb_system 系统表

数据库字段 字段中文说明 备注
system_id 系统编码
system_name 系统中文名称描述
company_id 公司id
company_name 公司中文名称
system_url 对应系统的url
model_name 模块请求路径名称
model_port 模块端口号
is_delete 逻辑删除 1 表示是,0 表示否
create_time 记录时间
update_time 更新时间

3.2 tb_role角色表

数据库字段 字段中文说明 备注
role_id 角色id
role_name 角色名称
system_id 系统id
company_id 公司id
is_delete 逻辑删除 1 表示是,0 表示否
create_time 记录时间
update_time 更新时间

3.3 tb_authority 权限表

数据库字段 字段中文说明 备注
authority_id 权限主键id
authority_name 权限名称
authority_url 权限对应模块的vue路径(备用)
company_id 公司id
system_id 系统编码
permission 功能许可编码 system:user:add
is_delete 逻辑删除 1 表示是,0 表示否
create_time 记录时间
update_time 更新时间
remarks 备用

3.4 tb_user_role用户角色表

数据库字段 字段中文说明 备注
user_id 用户id 用户中心传参数过来
role_id 角色id
role_name 角色名称
company_id 公司id
system_id 系统id
create_time 记录时间
update_time 更新时间
is_delete 逻辑删除 1 表示是,0 表示否

3.5 tb_role_authority角色菜单表

数据库字段 字段中文说明 备注
role_id 角色id
authority_id 菜单id
system_id 系统id
company_id 公司id
is_delete 逻辑删除 1 表示是,0 表示否
create_time 记录时间
update_time 更新时间

4 多语言开源项目对比

编程语言 github地址 点赞数 说明
java github.com/wuyouzhugul… 10.9k 基于spring security 说明文档比较齐全 mrbird.cc
go github.com/ory/hydra 7.5k 有一定的资料 www.ibm.com/developerwo…
c# github.com/IdentitySer… 5.5k 微软开源 identityserver.io