# 权限模块设计
# 1 什么是OpenID、OAuth
说明
无论是Web端还是移动端,现在第三方应用账户登录已经成为了标配,任意打开个网站都可以看到,QQ/微信账号登录的字样。使用第三方账户的登录的过程,既要限制用户身份只让有效注册用户才能登录,还要根据注册用户的不同身份来控制能浏览的内容,这就需要认证和授权
- OpenID:Authentication 认证 ---->验证用户账号密码是否正确
- OAuth :Authorization 授权 ----> 先进行OpenID验证,通过后再根据不同用户来控制用户的功能权限
# 2 OAuth四种授权模式
授权模式
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 客户端凭证模式
一般用于资源服务器是应用的一个后端模块,客户端向认证服务器验证身份来获取令牌。
# 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 | https://github.com/wuyouzhuguli/SpringAll | 10.9k | 基于spring security 说明文档比较齐全 https://mrbird.cc |
go | https://github.com/ory/hydra | 7.5k | 有一定的资料 https://www.ibm.com/developerworks/cn/security/se-bootstrap-hydra-oauth2/index.html |
c# | https://github.com/IdentityServer/IdentityServer4 | 5.5k | 微软开源 https://identityserver.io |
← 框架搭建说明