独立服务目录¶
此规范引入了一个独立的 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-keystoneclient 和 keystonemiddleware.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 上进行文档记录。
参考资料¶
无