在 angular 8 中授权资源的最佳方式是什么
What is the best way to authorize to a resource in angular 8
我正在尝试在 angular 8 中处理基于资源(或声明)的授权。我发现了一个 CASL angular 操作能力管理。
所以,我想在 angular 8 中使用基于操作的授权来保护所有 crud 操作。
应该也是claims based authorization。但是,我不知道哪个是最好的使用方法。
在 angular 8 中进行基于操作的授权的最佳方法是什么?
谢谢
CASL 好像是ACL,是在服务器端完成的。它定义每个资源服务器端的权限。 Angular 是客户端框架。
“什么是最好的方法”问题通常很快就会结束,因为它是主观的。
如果资源受 ACL、RBAC 或其他保护,您访问资源的方式没有区别。如果 http 请求 returns 出错,您可以处理响应并输出您想要的任何消息。
基于“声明”的身份验证您可能在想 openid-connect/oauth2 或您自己的 JWT 声明在服务器端发送身份验证。
你自己的实现比你自己写的更容易理解,对吧?但是写和做对需要的时间更长
我只知道 2 个开源 openid 连接服务器,即 keycloak and identityserver4
有 Angular 的库,但都非常不稳定。 Manfred Steyer 有一个 general purpose oidc/oauth2 library for Angular,但它在代码流方面存在问题,只有密码流和隐式流真正起作用,然后它变得越来越复杂,找出为什么静默刷新不起作用。 Chrome 正在执行 cookie 安全 SameSite 更新 soonTM,这将破坏许多网站。
有一个 keycloak js 适配器和一个 ngx-keycloak 存储库,但它们也有自己的问题,尤其是在到期前再次刷新令牌。
有些商业提供商及其库我没有测试过,比如 auth0 和 okta。
开发你自己的认证东西,它与 ACL and/or RBAC 分开,在服务器端和客户端都需要时间,但你可以控制一切。您可以模仿一些 oauth2/oidc 功能,例如令牌信息端点,因为您要发送 JsonWebTokens (JWT)。
分布式越多,您的应用就越不单一,它也就越复杂。
最好的是什么?这总是取决于。
CASL 是同构的,因此可以在后端和前端使用。 Angular @casl/angular 有一个单独的包,有助于更轻松地集成 CASL。
目前,CASL 的整体哲学围绕着行动(或主张)和主题展开。我现在正在研究 CASL v4,它将提供更好的 TypeScript 支持,并将支持基于声明的授权。
您现在甚至可以使用 CASL,查看 this comment 了解如何配置 Ability
以使用声明基础授权的信息
更新:对了还有an example of integration between CASL and Angular。相关文章在 README
我正在尝试在 angular 8 中处理基于资源(或声明)的授权。我发现了一个 CASL angular 操作能力管理。
所以,我想在 angular 8 中使用基于操作的授权来保护所有 crud 操作。
应该也是claims based authorization。但是,我不知道哪个是最好的使用方法。
在 angular 8 中进行基于操作的授权的最佳方法是什么?
谢谢
CASL 好像是ACL,是在服务器端完成的。它定义每个资源服务器端的权限。 Angular 是客户端框架。
“什么是最好的方法”问题通常很快就会结束,因为它是主观的。
如果资源受 ACL、RBAC 或其他保护,您访问资源的方式没有区别。如果 http 请求 returns 出错,您可以处理响应并输出您想要的任何消息。 基于“声明”的身份验证您可能在想 openid-connect/oauth2 或您自己的 JWT 声明在服务器端发送身份验证。
你自己的实现比你自己写的更容易理解,对吧?但是写和做对需要的时间更长
我只知道 2 个开源 openid 连接服务器,即 keycloak and identityserver4
有 Angular 的库,但都非常不稳定。 Manfred Steyer 有一个 general purpose oidc/oauth2 library for Angular,但它在代码流方面存在问题,只有密码流和隐式流真正起作用,然后它变得越来越复杂,找出为什么静默刷新不起作用。 Chrome 正在执行 cookie 安全 SameSite 更新 soonTM,这将破坏许多网站。
有一个 keycloak js 适配器和一个 ngx-keycloak 存储库,但它们也有自己的问题,尤其是在到期前再次刷新令牌。
有些商业提供商及其库我没有测试过,比如 auth0 和 okta。
开发你自己的认证东西,它与 ACL and/or RBAC 分开,在服务器端和客户端都需要时间,但你可以控制一切。您可以模仿一些 oauth2/oidc 功能,例如令牌信息端点,因为您要发送 JsonWebTokens (JWT)。
分布式越多,您的应用就越不单一,它也就越复杂。
最好的是什么?这总是取决于。
CASL 是同构的,因此可以在后端和前端使用。 Angular @casl/angular 有一个单独的包,有助于更轻松地集成 CASL。
目前,CASL 的整体哲学围绕着行动(或主张)和主题展开。我现在正在研究 CASL v4,它将提供更好的 TypeScript 支持,并将支持基于声明的授权。
您现在甚至可以使用 CASL,查看 this comment 了解如何配置 Ability
以使用声明基础授权的信息
更新:对了还有an example of integration between CASL and Angular。相关文章在 README