Swift/ideas/swiftclient-keystone-session
Swiftclient Keystone 会话支持
关于正确使用 Keystone 会话,我们已经在峰会/黑客马拉松上讨论了一段时间了 :(
过去曾有人做过一些工作,使用一种非常轻量级的方法,允许 python-swiftclient 在保持现有 API 的同时使用 Keystone 会话。然而,Keystone 的最新更新以及特定版本会话的弃用,意味着我们使用 Keystone 的方式(特定 Keystone 版本会话和提取令牌直接使用)与 Keystone 开发人员的当前期望不符。
在使用 Keystone 进行身份验证时,python-swiftclient 应该使用 Keystone 会话来发出请求,并允许将现有的会话对象传递给 API 调用(或 SwiftService 实例)。当前的 python-swiftclient 代码通过从会话中获取访问令牌来直接使用访问令牌,以避免更改现有的方法签名。
为了按照 Keystone 项目的期望使用会话,我们需要执行以下操作
- 所有客户端 API 函数都需要重构,以停止处理重新身份验证、添加身份验证头和手动处理令牌
- 所有客户端请求都应通过 Keystone 会话进行
因此,这需要大量的工作,并且可能会破坏 API:S
另一个讨论点来自之前的(现在已放弃)补丁,提出了我们也许不应该指定 Keystone 版本,而是使用 keystoneauth 的版本发现,但同样,这也会给 swiftclient 的所有层带来细微的行为变化,包括 CLI(例如,发现身份验证端点而不是使用确切指定的端点,或者完全忽略请求的身份验证版本)。
当前补丁和相关讨论
补丁“尽可能使用 keystone 会话” [1] 已由 jaosorior 添加,作为起点,并表明在 python-swiftclient 中正确支持通用 Keystone 会话和 Keystone 版本检测需要哪些更改。