【问题标题】:What is the best way to authorize to a resource in angular 8在 Angular 8 中授权资源的最佳方式是什么
【发布时间】:2020-01-24 16:30:28
【问题描述】:

我正在尝试在 Angular 8 中处理基于资源(或声明)的授权。我发现了一个 CASL 角度操作能力管理。

所以,我想在 Angular 8 中使用基于动作的授权来保护所有粗略的动作。

它也应该是基于声明的授权。但是,我不知道哪个是最好的使用方法。

在 Angular 8 中进行基于动作的授权的最佳方法是什么?

谢谢

【问题讨论】:

    标签: angular casl


    【解决方案1】:

    CASL 似乎是 ACL,是在服务器端完成的。它定义了每个资源服务器端的权限。 Angular 是一个客户端框架。

    “什么是最好的方法”问题通常很快就会结束,因为它是主观的。

    如果资源受 ACL、RBAC 或其他保护,您访问资源的方式没有区别。如果 http 请求返回错误,您可以处理响应并输出您想要的任何消息。 您可能正在考虑基于“声明”的身份验证 openid-connect/oauth2 或您自己的 JWT 声明发送服务器端的身份验证。

    你自己的实现是你写的,更容易理解,对吧?但是写和做对需要更长的时间。

    我只知道 2 个开源 openid 连接服务器,即 keycloakidentityserver4

    有 Angular 的库,但都非常不稳定。 Manfred Steyer 有一个general purpose oidc/oauth2 library for Angular,但它在代码流方面存在问题,只有密码流和隐式流真正起作用,然后找出为什么静默刷新不起作用变得越来越复杂。 Chrome 正在做一个 cookie 安全 SameSite update SoonTM,这将破坏许多网站。

    有一个 keycloak js 适配器和一个 ngx-keycloak 存储库,但它们也有问题,尤其是在过期之前再次刷新令牌。

    有些商业提供商的库我没有测试过,比如 auth0 和 okta。

    开发您自己的身份验证事物(独立于 ACL 和/或 RBAC)在服务器端和客户端都需要时间,但您可以控制一切。您可以模仿一些 oauth2/oidc 功能,例如令牌信息端点,因为您要发送 JsonWebTokens (JWT)。

    分布越多,应用程序越不单一,它也就越复杂。

    什么是最好的?这总是取决于。

    【讨论】:

      【解决方案2】:

      CASL 是同构的,因此可以在后端和前端使用。 Angular @casl/angular 有一个单独的包,它有助于更​​轻松地集成 CASL。

      目前,CASL 的整体理念围绕着行动(或主张)和主题展开。我现在正在研究 CASL v4,它将有更好的 TypeScript 支持,并将支持基于声明的授权。

      您现在也可以使用 CASL,查看 this comment 了解如何配置 Ability 以使用声明基础授权

      更新:顺便还有an example of integration between CASL and Angular。相关文章在 README 中

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-19
        • 1970-01-01
        • 2012-02-03
        • 1970-01-01
        • 2016-01-30
        相关资源
        最近更新 更多