V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
asanelder
V2EX  ›  程序员

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

  •  
  •   asanelder · 2021-01-06 11:14:01 +08:00 · 3250 次点击
    这是一个创建于 1204 天前的主题,其中的信息可能已经有所发展或是发生改变。
    俺目前在做一个平台,需要提供一些开放 api (以 http 的形式)给第三方调用。

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

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

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

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

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

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

    推荐参考使用 sureness - https://github.com/tomsun28/sureness
    ResidualWind
        6
    ResidualWind  
       2021-01-06 15:03:55 +08:00
    这个权限设计思路可以参考下
    https://github.com/Heeexy/SpringBoot-Shiro-Vue
    sazima
        7
    sazima  
       2021-01-06 17:08:11 +08:00
    不用 shiro 不就行了
    leopod1995
        8
    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
        9
    hsluoyz  
       2021-01-06 18:28:31 +08:00
    用 casbin,支持 RBAC 、ABAC,中间切换模型也很简单
    asanelder
        10
    asanelder  
    OP
       2021-01-06 19:31:27 +08:00
    @tomsun28 #5
    @ResidualWind #6
    @leopod1995 #8
    @hsluoyz #9

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

    如果是要限制用户的权限,用 rbac
    xuanbg
        13
    xuanbg  
       2021-01-07 09:50:55 +08:00
    开发 API 哪有什么权限?都是验签。
    asanelder
        14
    asanelder  
    OP
       2021-01-08 23:14:45 +08:00
    @xuanbg #13 飞书的就需要啊。。。不仅仅是一个签名
    AlpacaCode
        15
    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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4411 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 1813ms · UTC 04:07 · PVG 12:07 · LAX 21:07 · JFK 00:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.