Restful API 如何做权限控制 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jimzhong
V2EX    PHP

Restful API 如何做权限控制

  •  
  •   jimzhong 2017-04-06 16:55:23 +08:00 6781 次点击
    这是一个创建于 3169 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近用 lumen 做一个留学机构的网站后端。打算用基于权限的访问控制,请问有没有比较好的解决方案。

    第 1 条附言    2017-04-07 09:48:26 +08:00
    已经使用 access-token 搞定了 Authentication
    7 条回复    2019-09-09 14:32:18 +08:00
    colatin
        1
    colatin  
       2017-04-06 16:59:42 +08:00
    jwt
    sirgod
        2
    sirgod  
       2017-04-06 17:00:53 +08:00
    如果是给人用的页面就 cookie ,如果是供服务器调用的接口就 api key + secret key
    rokeyzki
        3
    rokeyzki  
       2017-04-06 17:16:16 +08:00   2
    一句话: Authentication + Authorization

    首先是身份认证,使用 JWT 规范生成的 token ,搭配中间层做请求( api key + secret key ),不过要注意,尽可能不要使用 cookie 存储 token ,注意防范 CSRF 攻击。

    然后就是访问授权,通过访问控制列表,将 User 分类到不同的 Role 来管理,有对应权限的 Role 才可以执行对应的操作。
    peablog
        4
    peablog  
       2017-04-06 21:21:36 +08:00
    也可以考虑在网关鉴权,比如 getkong.org
    jimzhong
        5
    jimzhong  
    OP
       2017-04-07 09:47:28 +08:00
    @rokeyzki 感谢指点。 Authentication 已经搞定了。对 Authorization 有一些疑问。

    我想按照 RBAC 方式,一个用户有多个 role ,每个 role 有多个权限。那么这样以来用户,角色,权限各需要一张表,连接用户和角色,角色和权限各需要一张表,一共需要 5 张表,感觉有些麻烦。

    对于权限比较少的请情况,我能否把不同操作的权限 hardcode 在代码中呢?
    rokeyzki
        6
    rokeyzki  
       2017-04-07 10:42:23 +08:00   1
    @jimzhong 如果权限确实比较少,可以考虑用 ACL 机制,不用 RBAC 机制,去掉角色,也减少了表的数量。

    两种机制都有利弊,需要自己根据实际业务场景去权衡,但是有一点可以确定,团队开发中,一定要尽可能避免 hardcode
        7
    techone  
       2019-09-09 14:32:18 +08:00
    推荐个扩展,基于 Casbin 的 Laravel 权限控制: https://github.com/php-casbin/laravel-authz
    支持中间件、RESTful 权限控制、缓存等。

    [Casbin]( https://github.com/php-casbin/php-casbin) 是一个强大的、高效的开源访问控制框架,它支持基于各种访问控制模型( RBAC ABAC ACL )的权限管理,并且跨语言支持 Golang, Java, Node.js, PHP, Python, .NET (C#), Delphi and Rust 等。
    techone
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5160 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 07:19 PVG 15:19 LAX 23:19 JFK 02:19
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86