8

我有一个 C# .net 应用程序,它同时为公司的内部用户和外部客户提供服务。我需要做细粒度的授权,比如谁访问什么资源。所以我需要基于资源或基于属性的东西,而不是基于角色的授权。

我想到的是:

  1. 为我的 .net 应用程序实现我自己的授权机制和 sql 表
  2. 使用/实现标准机制,例如实现 XACML 的软件(例如 Axiomatics)

第一种方法的问题是它既不是集中的也不是标准的,因此其他系统无法使用它进行授权。

第二种方法的问题在于它可能更慢(由于每个资源都需要额外的调用)。此外,我不确定市场上的应用程序支持像 XACML 这样的标准授权有多广泛,以使未来的集成更容易。

那么,一般来说,对于应该为内部用户和外部客户服务的 Web 应用程序进行细粒度授权的良好做法是什么?

4

3 回答 3

8

我肯定会去外部授权。这并不意味着它会变慢。这意味着您已经将访问控制与业务逻辑完全分开。

概述 XACML 是一个不错的选择。TC 非常活跃,波音、EMC、退伍军人管理局、甲骨文和 Axiomatics 等公司都是活跃的成员。

XACML 架构保证您可以获得所需的性能。由于执行 (PEP) 和决策引擎 (PDP) 是松散耦合的,您可以选择它们的通信方式、它们使用的协议、是否使用多个决策等...这意味着您可以选择进行集成满足您的性能需求。

在 XACML 的 SAML 配置文件中还定义了一个标准 PDP 接口。这保证了您不会被锁定在任何特定供应商解决方案中的“面向未来”的访问控制。

Web 应用程序的访问控制 您可以通过使用 ISAPI 和 ASP.NET 中的 HTTP 过滤器简单地为 .Net Web 应用程序添加 PEP。Axiomatics 已经为此提供了一个现成的。

当前实现 如果您查看 Axiomatics 的客户页面,您会看到他们拥有 Paypal、Bell Helicopter 等。所以 XACML 确实是一个现实,它可以处理非常大的部署(数亿用户)。

此外,领先的金融服务提供商 Datev eG 正在为其服务/应用程序使用 Axiomatics 的 .Net PDP 实施。由于在这种情况下嵌入了 .Net PDP,因此性能是最佳的。

否则,您始终可以从与任何 PDP 集成的 .Net 的现成 PEP 中进行选择 - 例如基于 SOAP 的 XACML 授权服务。

XACML 的高水平性能 去年 7 月,在 Gartner“催化剂”会议上,Axiomatics 宣布发布他们的最新产品 Axiomatics 反向查询,该产品可帮助您应对“十亿记录挑战”。它针对数据源和 RIA 的访问控制。它使用纯 XACML 解决方案,以便与其他解决方案保持互操作性。

事实上,Kuppinger Cole 很快就会就该主题举办一次网络研讨会:http ://www.kuppingercole.com/events/n10058

也可以在这里查看 Axiomatics ARQ 新闻稿:http ://www.axiomatics.com/latest-news/216-axiomatics-releases-new-reverse-query-authorization-product-a-breakthrough-innovation-for-authorization-服务.html

于 2011-11-03T14:25:54.713 回答
3

一定要为您的 ASP.NET 应用程序寻找一个插入式授权模块。我之所以这么说,不仅是因为我在BiTKOO实现了插入式身份验证系统,还因为我过去不得不使用本土的身份验证实现。为单个应用程序构建自己的授权系统确实不是对您的时间或资源的良好利用,除非您打算以实施安全系统为职业。

从架构的角度来看,从您的应用程序中外部化授权决策是一个好主意。将 authz 决策外部化为您提供了极大的灵活性,可以即时更改访问标准,而无需关闭 Web 服务或重新配置 Web 服务器本身。将 Web 前端与 authz 引擎解耦后,您可以根据应用程序的负载和流量模式独立扩展每个前端,并允许您在多个应用程序之间共享 authz 引擎。

是的,与根本没有授权或在 Web 服务器上使用本地数据库相比,向 Web 应用程序添加网络调用会增加 Web 响应的一些开销。这不应该成为不考虑外部授权的理由。您考虑的任何严肃的授权产品都将提供某种缓存功能,以最大限度地减少每个 Web 请求甚至跨多个 Web 请求的每个用户会话所需的网络调用次数。

例如,在 BiTKOO 的 Keystone 系统中,用户属性可以在每个用户会话中缓存在 Web 服务器上,因此作为建立用户登录的一部分,第一个页面请求实际上只涉及一个后端网络请求。随后的页面请求(在缓存凭证的生命周期内,通常为 5 分钟左右)可以由 Web 服务器处理,而无需再次访问 authz 服务。这在云网络农场中可以很好地扩展,并且建立在 XACML 标准之上。

于 2011-11-10T20:14:20.590 回答
1

我需要做细粒度的授权,比如谁访问什么资源。所以我需要基于资源或基于属性的东西,而不是基于角色的授权。

看看这个:https ://zanzibar.academy/ 。Zanzibar 是 Google 为解决大规模细粒度授权问题而开发的一个项目。

使用/实现标准机制,例如实现 XACML 的软件(例如 Axiomatics)。第二种方法的问题在于它可能更慢(由于每个资源都需要额外的调用)。

Auth0 正在开发一个名为 Sandcastle ( https://learn.sandcastle.cloud/ ) 的解决方案,该解决方案将针对低延迟进行优化。它建立在桑给巴尔纸上。

免责声明:我受雇于 Auth0。

于 2021-10-06T03:57:05.063 回答