独立服务目录

bp get-catalog

此规范引入了一个独立的 v3 API 请求,用于获取经过身份验证的服务目录,用于那些不包含目录的令牌(使用 ?nocatalog 查询参数生成的令牌)。

问题描述

PKI 令牌即使在应用压缩后也很大,这主要是由于可以包含的服务目录的大小。解决这个问题的一种方法是让客户端使用 Identity API v3 的 ?nocatalog 查询参数请求令牌,这会将服务目录从令牌本身中移除。不幸的是,这会破坏期望在令牌中出现服务目录的客户端和服务。

提议的变更

在服务侧,我们需要一个显式的 API 调用来检索经过身份验证的服务目录,例如 GET /v3/auth/catalog。这将返回令牌的 catalog 对象的完全内容,除了可能包含 links 之外,不做任何修改,这符合 Identity v3 API 的惯例。目标是该对象应该可以被 v3 服务目录的所有现有客户端使用。

python-keystoneclient 必须能够发出新的 API 调用(可能延迟执行),以便在访问目录时进行调用。

keystonemiddleware.auth_token 必须能够发出新的 API 调用,以便在令牌不包含目录时填充 X-Service-Catalog 标头。

备选方案

令牌响应体也可以包含未编码到 PKI 令牌中的服务目录。虽然这为最终用户提供了一个解决方案,但此选项的缺点是服务仍然缺少目录的令牌,并且无法检索目录。

安全影响

虽然这引入了一个新的经过身份验证的 API 资源,但它不会暴露任何先前对最终用户隐藏的数据。

值得注意的是,服务侧的目录内容可能在颁发令牌后发生变化。因此,远程服务不应期望给定令牌的静态目录,也不应将独立的 service catalog 作为授权的手段。

通知影响

其他最终用户影响

这将使最终用户能够使用生成时不含服务目录的 v3 令牌来获取服务目录。

python-keystoneclientkeystonemiddleware.auth_token 都应该在没有用户干预的情况下为新的调用添加支持。

性能影响

此更改可能会增加网络流量,以换取更小的令牌。

keystonemiddleware.auth_token 可能会缓存令牌的服务目录,以避免重复向 Keystone 发送目录请求。

由于消除了对目录驱动程序的调用,令牌的生成速度会略微加快。

令牌的大小可能会大大减少,从而有效地减少所有服务(尤其是那些不使用服务目录的服务)的 HTTP 数据包大小。

其他部署者影响

keystonemiddleware.auth_token 可能会受益于一个新的配置选项,以指示受保护的服务不需要目录(在性能方面)。

开发人员影响

实现

负责人

主要负责人

dolph

其他贡献者

工作项

  • openstack/identity-api 中添加新的 API 调用

  • openstack/keystone 中添加服务侧实现

  • python-keystoneclient 添加支持,以便在遇到缺少令牌时检索服务目录

  • keystonemiddleware.auth_token 添加支持,以便在遇到缺少令牌时检索服务目录(并且底层服务期望目录)

依赖项

将身份验证特定的路由添加到 /auth 路径是 auth-specific-data 蓝图的一部分。但是,不同蓝图的功能之间没有依赖关系。

文档影响

建议的 API 需要在 Identity API v3 的一部分在 openstack/openstack-api-site 上进行文档记录。

参考资料