求助啊!类似飞书开放平台的接口权限控制怎么做?

2021 年 1 月 6 日
 asanelder
俺目前在做一个平台,需要提供一些开放 api (以 http 的形式)给第三方调用。

认证部分俺解决了,使用的是,oauth 。

但鉴权部分,需要用户申请相应的权限,才可以调用相关的接口。一个例子,如飞书的开放接口设计,需要申请相关权限才能设备相关 api 。

https://open.feishu.cn/document/ukTMukTMukTM/uQjN3QjL0YzN04CN2cDN

之前见过使用 shiro 做权限控制,但那个系统有明显的用户,角色,权限三个层级。而以上飞书的例子是没有角色这个东西的。

现在想请教一个有类似经验的老铁,飞书的那种权限控制是怎么设计的呢?

俺担心自己走偏了,所以找找行业实践,有没有老铁指点一二啊~~~
3948 次点击
所在节点    程序员
15 条回复
YIsion
2021 年 1 月 6 日
token 做鉴权,可以参考 github 的实现
catror
2021 年 1 月 6 日
大概是 ABAC
dorothyREN
2021 年 1 月 6 日
shiro 不验证 角色 只验证权限不就行了。。。
rb6221
2021 年 1 月 6 日
这个权限申请好像就是发个邮件填个表那种吧,人工审核以后后台开的
tomsun28
2021 年 1 月 6 日
感觉这个整体抽象起来还是 rbac,你需要的是可以动态修改赋权给角色的权限数据。只是这里把角色隐化了。
想想大概应该可以这样弄,水平有限勿喷
用户-角色组-资源权限
新建的用户除了拥有一些基本角色外,拥有一个单独自定义角色,此角色来拥有那些开放接口的访问权限,我们可以通过接口调用动态修改权限配置
[需要用户申请相应的权限] 这个也一样,维护一张申请表,若审核通过就动态修改角色权限配置信息

推荐参考使用 sureness - https://github.com/tomsun28/sureness
ResidualWind
2021 年 1 月 6 日
这个权限设计思路可以参考下
https://github.com/Heeexy/SpringBoot-Shiro-Vue
sazima
2021 年 1 月 6 日
不用 shiro 不就行了
leopod1995
2021 年 1 月 6 日
这个我做过,#5 说的有道理, 补充个例子。

1,把所有可能的权限做个权限 list, 例如 readSomething, write;
2,Role 绑定权限内容(read)和用户(第三方 appid);
3, 第三方申请 read 权限,绑定到第三方的 role 。
至此,第三方申请什么权限,授权之后就有什么权限。
------------------------------------
补充:
接口一定是要和权限做模式匹配的,比如 getuserinfo 一定是在 call 之前就做”读取用户信息“权限认证的。
Oauth 授权的用户也要和 getuserid 的 userid 做匹配。
hsluoyz
2021 年 1 月 6 日
用 casbin,支持 RBAC 、ABAC,中间切换模型也很简单
asanelder
2021 年 1 月 6 日
@tomsun28 #5
@ResidualWind #6
@leopod1995 #8
@hsluoyz #9

感谢老铁提供的线索和思路,俺这几天研究一下,有不明白再来请教!!!
zhenjiachen
2021 年 1 月 6 日
我咋看不到这个页面
chinvo
2021 年 1 月 6 日
如果是要限制应用的权限,用 scope

如果是要限制用户的权限,用 rbac
xuanbg
2021 年 1 月 7 日
开发 API 哪有什么权限?都是验签。
asanelder
2021 年 1 月 8 日
@xuanbg #13 飞书的就需要啊。。。不仅仅是一个签名
AlpacaCode
2022 年 3 月 30 日
@ResidualWind 你好我想问一下,如果这样设计的话,假设我们把这个角色看成是多个权限的权限组,这样如果管理不妥善的话就会导致权限组变的很多,但是多个权限组里面的权限内容却是相同的

Role1 权限 1 权限 2 权限 3
Role2 权限 1 权限 2
Role3 权限 1 权限 2 权限 3
....
RoleN 权限 1 权限 2 权限 3

用户 A Role1 or Role3 or RoleN

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/742119

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX