背景随着技术的快速发展并日益复杂化,安全和合规性的要求不断提升,传统的授权方案已经难以满足企业不断变化的需求。授权系统面临着如下挑战:
这些促使授权系统需要持续演进以适应新的技术和业务需求,通过标准化机制、协议和格式来交换授权相关信息,促进向更动态、更细粒度的授权能力的范式转变。 如此就有了 OpenID 基金会的 AuthZen 工作组[1]。 AuthZen 工作组AuthZen 是 Authorization Exchange 的简称(起初看到这个名字我以为 Zen 就是那个 Zen),是 OpenID 基金会[2] 比较新的工作组,官宣于 2023 年 10 月。 AuthZEN 工作组的目的是提供标准机制、协议和格式,以便在一个组织内部或跨组织之间的组件传递授权相关信息,这些组件可能由不同实体开发或来源。 正如起名字,这个工作组试图来解决在授权中遇到的 Exchange(交换) 问题,即如何在不同组件之间交换授权信息。 让我们来看一下 Exchange 发生在哪些地方: XACML 授权模型下面是源于 23 年前的 XACML[3] 数据流模型。
图片来自维基百科 XACML 将访问控制分离为多个组件:PEP、PDP、PAP 和 PIP ,这些组件组成完整的授权系统。
大体的流程如下:
在实际的应用中,策略的执行点会根据不同的场景和需求进行不同粒度的定制。例如,在请求的入口处(网关)进行拦截,在应用的内部各个 API 端点进行拦截。 根据耦合性的要求,PEP 的角色可以是一个边车、一个 SDK 或者一个库。 AuthZen 的首要目标在多厂商、多技术生态共存的场景中,PEP 和 PDP 之间的互操作性问题是一个常见的挑战。AuthZen 将解决 PEP 和 PDP 之间的互操作性问题作为其首要目标。 互作操作性代表了组件 PEP 和 PDP 间的协作能力,它允许异构组件之间的协作,无需关心组件使用的技术、编程语言或者协议。API 是实现互操作性的桥梁,也是重要的实现方式之一,通过定义明确的接口规范,允许不同组件通过标准化的请求和响应进行通信,隐藏了底层复杂的实现细节。 为此,AuthZen 工作组将制定一套标准化的 API 规范 Authorization APIAuthorization API 1.0[4](目前这个 API 还是处于草案阶段),用于支持 PEP 和 PDP 之间的通信,以实现二者之间的互操作性。简单来说,Authorization API 由 PDP 实现并提供给 PEP 来调用:PDP 是决策服务的提供者,PEP 是决策服务的调用者。 版本Authorization API 当前的版本是 1.0,对应 API 的路径是 信息模型截止目前,Authorization API 定义了如下的信息模型:
评估请求在 Authorization API 请求中,subject、action、resource 是必需字段,context 是可选字段。 示例: { 评估响应评估的响应非常简单,只包含了一个布尔类型的字段 decision,可选值只有 响应中还可以提供一个可选的 context 字段,用于向 PEP 传达可以使用的附加信息,比如授权失败的原因等。该字段可以是任何 JSON 对象。 示例:
通信API 规定了通信必需使用 HTTPS 协议。 其他除了上面介绍的部分,API 规范中还定义了如错误响应、身份认证、IANA、安全等内容,这里不做展开,感兴趣的可以查看 Authorization API 1.0 草案[5]。 未来从 KubeCon 2024 NA 的演讲中可以看到 AuthZen 工作组的未来计划会继续围绕 API 标准的优化,并展开生态合作。 API 标准:
生态合作:
总结AuthZen 工作组的目标是提供标准机制、协议和格式,以便在一个组织内部或跨组织之间的组件传递授权相关信息,这些组件可能由不同实体开发或来源。其首要目标是解决 PEP 和 PDP 之间的互操作性问题。 为了实现这个目标,AuthZen 工作组制定了 Authorization API 1.0[8],用于支持 PEP 和 PDP 之间的通信,以实现二者之间的互操作性。本文对 API 草案的信息模型、评估请求、评估响应、通信等内容进行了简要介绍。 参考
AuthZen 工作组: https:///wg/authzen/ [2]OpenID 基金会: https:/// [3]XACML: https://en./wiki/XACML [4]Authorization API 1.0: https://openid./authzen/ [5]Authorization API 1.0 草案: https://openid./authzen/ [6]Resource Search API: https://openid./authzen/authorization-api-1_0-original [7]Subject Search API: https://openid./authzen/authorization-api-1_0-original [8]Authorization API 1.0: https://openid./authzen/ [9]AuthZen 工作组: https:///wg/authzen/ [10]Authorization API 1.0 草案: https://openid./authzen/ [11]video: https://www./watch?v=MTAXC0ZaXcE&t=4s [12]slides: https://static./hosted_files/kccncna2024/e4/AuthZEN%20OIDC%20of%20Authorization.pdf?_gl=11vqif7c*_gcl_auMzY0Njk0ODk5LjE3MzAxNDc1NTkuMjk2MTM1NTM2LjE3MzEzOTA0NDguMTczMTM5MTQxOQ..FPAUMzY0Njk0ODk5LjE3MzAxNDc1NTk. |
|