宣布OpenFGA - Auth0的开源细粒度授权系统

517 阅读8分钟

几个月前,我们宣布了Auth0细粒度授权(FGA)的开发者预览版,这是我们即将推出的SaaS产品,为开发者解决授权问题。今天,我们宣布了OpenFGA,它是支持Auth0 FGA的开源引擎。

OpenFGA是一个快速、灵活的细粒度授权系统,其灵感来自于谷歌的Zanzibar文件,并被设计为在高规模下的可靠性和低延时。它使应用开发者很容易对他们的访问控制层进行建模,并以一种在他们所有的应用中保持一致的方式添加和整合细粒度授权。它是由Okta/Auth0设计、建造和赞助的。

为什么细粒度的授权很重要?

现代应用已经发展到由终端用户来驱动权限管理。这使得细粒度授权成为软件中越来越重要的元素。比如说。

协作社交功能是用户所期望的东西。这些功能包括从**"共享 "按钮,用户主动授予一组用户特定资源的特定权限,到"请求访问 "**工作流程,允许用户根据需要反应性地授予访问权限。这些功能既适用于与业务相关的资产,如文档或项目板,也适用于社交分享个人内容,如相册、社交媒体帖子,甚至是物联网设备。

安全性、合规性和隐私是任何软件应用从第一天起就必须解决的问题,而授权是任何解决方案的重要组成部分。事实上,2021年OWASP的首要风险是访问控制被破坏。

像Airbnb和Carta这样的组织已经建立了类似桑给巴尔的系统来解决他们的授权需求。我们认为,企业不应该一次又一次地建立相同的授权工具,所以我们着手建立一个任何开发者都可以使用的版本。

它是如何工作的?

作为一个例子,我们将使用OpenFGA来模拟一个简单的费用管理系统。想象一下,费用报告有以下要求。

  • 可以由任何员工提交。
  • 可以由提交者的经理,或经理的经理(或他们的经理,等等)批准。
  • 可以由提交者、批准者以及任何与他们共享报告的其他人查看。

要在OpenFGA中解决这个问题,你要定义以下授权模型。

// There are reports in the system
type report
 relations
   // Reports have submitters (user who have submitted that report)
  define submitter as self
   // Reports have approvers (users who can approve reports)
   // A report's approvers are the managers of the submitter
   //   of that report
  define approver as manager from submitter
   // Reports have viewers (user who can view that report)
   // The users who can view a report are the submitter,
   //   the users who can approve it, anyone it has been shared directly with
  define viewer as self or submitter or approver

// There are employees in the system
type employee
 relations
   // Employees have managers, managers are those directly assigned
   //   or anyone who's a manager of a manager
  define manager as self or manager from manager

OpenFGA语言使用self ,表示可以分配关系。

  • 一个报告的提交者和查看者可以直接分配。
  • 一个雇员的直接经理可以直接分配。

没有self 的定义不能直接分配,但可以继承。

除了定义一个授权模型外,OpenFGA还要求你提供实际的数据来实例化这些权限。在这个例子中,我们将有4个参与者。

  • 丹尼尔,他是山姆的经理
  • 马特,他是丹尼尔的经理
  • 山姆,他将提交一份支出报告
  • 彼得,他和山姆在同一个团队工作。萨姆想与他分享报告。

你将通过使用 OpenFGA的Write API和一些 "图元 "来提供这些数据。

其中一些图元将定义直接报告。这些数据可能会从人力资源系统(如Workday)自动同步。

{ "user": "employee:daniel",  "relation": "manager", "object": "employee:sam" }

{ "user": "employee:matt",  "relation": "manager", "object": "employee:daniel" }

每当萨姆提交一份支出报告(在这个例子中,"萨姆-旅行")时,应该创建以下元组。

{ "user": "employee:sam",  "relation": "submitter", "object": "report:sam-trip" }

当Sam后来与Peter分享该报告时,应该创建以下元组。

{ "user": "employee:peter",  "relation": "viewer", "object": "report:sam-trip" }

现在系统中已经有了上述信息,我们现在可以询问OpenFGA某个特定用户是否与某个特定对象有特定关系。我们通过使用OpenFGA的Check API来做到这一点它将返回真或假。例如,如果我们检查 { "user": "employee:matt", "relation": "approver", "object": "report:sam-trip" },OpenFGA将返回TRUE,因为Matt是Sam的经理的经理,而Sam是费用报告的提交者。

你也可以使用"扩展 "API来理解为什么OpenFGA会返回这个结果。Auth0 FGA游乐场提供了一个调用该API的结果的可视化。

OpenFGA

它需要回答 "employee:matt是否与作为审批人的report:sam-trip有关"。要做到这一点,OpenFGA。

  1. 为Sam的报告扩展了 "批准者 "关系
  2. 发现审批者需要是山姆的经理(报告提交者的经理),并发现谁是经理
    1. Daniel是Sam的指定经理,但Daniel不是我们要找的那个人
    2. Daniel的经理也是Sam的经理,所以OpenFGA需要扩展他们
  3. 为丹尼尔扩展了 "经理 "关系
    1. Matt是Daniel的经理,这就是我们要找的人
    2. Matt的经理也是Sam的经理,但没有为Matt定义经理。

总结一下,你需要

  • 定义一个特定领域的授权模型。
  • 使用Write()API来添加关系图元。
  • 使用Check()API来检查权限。
  • 在你需要详细了解Check()结果而不是简单的TRUE或FALSE响应的情况下,使用Expand()API。

为什么是开源的?

Auth0和Okta都维护着大量的开源项目,并在内部使用无数的开源产品。这次我们比以往更进一步,将Auth0的一个核心产品开源。我们将继续提供 Auth0 FGA作为一个SaaS产品,但也努力建立一个桑给巴尔式授权系统的最佳开源实现。

我们这样做有几个原因。

  • 我们相信有机会围绕一个精细的授权系统创建一个庞大的生态系统,而将我们的FGA产品开源将最大限度地增加这种机会。我们希望OpenFGA能与OPA等授权策略产品、Envoy等代理、Kong等API网关、身份提供商(Auth0OktaAzureAD)、平台和框架的SDK(Python、Java、 SpringNext.js)等集成。
  • 我们希望让那些需要在不同的云供应商、内部部署、多个地区部署、符合FedRAMP的客户,或者那些对授权给第三方供应商的风险容忍度低的客户。根据我们在Auth0方面的经验,我们知道这些都是SaaS产品的难题。
  • 有一个共同的方式来管理细粒度的授权,这个行业将受益。我们相信Auth0/Okta是能够实现这一目标的公司。它是身份访问管理领域的领导者,受到成千上万客户的信任,与云无关,并且有能力对产品进行长期投资。

我们在开源什么?

我们正在开放驱动我们SaaS产品的引擎,以及使其易于使用的SDK。

你可以在 Github的OpenFGA组织中找到所有这些项目

  • OpenFGA服务器:提供的核心FGA服务器。
    • 一种表达式语言来定义你的授权模型。
    • 用于检查和授予权限、编写模型、查询图元的HTTP APIs。
    • 一个受Google Zanzibar启发的图查询实现。
    • 可插拔的存储适配器,支持内存数据库和PostgreSQL
    • OpenTelemetry跟踪、度量和结构化日志
  • 网站和文档。openfga.dev网站,包括我们的产品文档。
  • SDK生成器:基于OpenAPI定义生成SDK的工具。
  • Go SDK,.NET SDK, Javascript SDK:用于不同语言的SDK,更多的SDK即将推出
  • Auth0的FGA游乐场,现在还没有开放源代码,但在接下来的几周内将会开放。

OpenFGA和云原生计算基金会

云原生计算基金会(CNCF)是一个开源软件基金会,旨在促进云原生计算的采用。它承载了Kubernetes、Envoy和Open Policy Agent等项目,以及其他一百个项目。

正如我们之前提到的,我们认为需要有一个开源版本的桑给巴尔启发的细粒度授权产品。创建这样一个产品需要一个早期采用者能够信任的倡议。为了进一步加快这一进程,我们将OpenFGA提交给了云原生计算基金会的沙盒

通过加入CNCF,OpenFGA项目将找到一个更大的、充满活力的社区,这将有助于这一倡议继续发展,并吸引更多的用户和开发者。

试试吧!

一个开源项目的好坏取决于它的社区,所以我们热烈欢迎每一个想要参与的人。

你可以通过简单地试用产品、提供反馈、在 Discord/ Github讨论中与其他OpenFGA用户互动、参加我们每两个月一次的办公时间、或为项目 做贡献来帮助我们。

通过访问 openfga.dev了解更多信息,并在我们 出色的文档中学习如何使用它。在 Twitter上关注我们,了解最新的消息。


© 2013-2022 Auth0公司。保留所有权利。