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

2021-01-06 11:14:01 +08:00
 asanelder
俺目前在做一个平台,需要提供一些开放 api (以 http 的形式)给第三方调用。

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

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

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

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

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

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

推荐参考使用 sureness - https://github.com/tomsun28/sureness
ResidualWind
2021-01-06 15:03:55 +08:00
这个权限设计思路可以参考下
https://github.com/Heeexy/SpringBoot-Shiro-Vue
sazima
2021-01-06 17:08:11 +08:00
不用 shiro 不就行了
leopod1995
2021-01-06 17:58:31 +08:00
这个我做过,#5 说的有道理, 补充个例子。

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

感谢老铁提供的线索和思路,俺这几天研究一下,有不明白再来请教!!!
zhenjiachen
2021-01-06 19:37:32 +08:00
我咋看不到这个页面
chinvo
2021-01-06 19:41:36 +08:00
如果是要限制应用的权限,用 scope

如果是要限制用户的权限,用 rbac
xuanbg
2021-01-07 09:50:55 +08:00
开发 API 哪有什么权限?都是验签。
asanelder
2021-01-08 23:14:45 +08:00
@xuanbg #13 飞书的就需要啊。。。不仅仅是一个签名
AlpacaCode
2022-03-30 10:10:18 +08:00
@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