可选地强制使用 URL 安全的域名和项目名称

bp url-safe-naming

为了准备未来支持项目和域名的分层命名,弃用非 URL 安全的名称,并可选地强制使用 URL 安全的名称。

问题描述

很久以前,在一个遥远的发布版本中,只有一个扁平命名空间的租户。租户名称自然需要在整个 Keystone 中是唯一的。随后,我们添加了域名(用于容纳租户,现在称为项目),这意味着项目名称只需要在该域名内唯一。我们现在支持项目层次结构(在域名内),并且将来可能支持域名高于项目的层次结构。然而,我们的名称唯一性规则没有改变,因此项目名称必须(实际上)在其层次结构中唯一,域名仍然需要在整个 Keystone 中唯一。我们的规则没有改变的主要原因是我们支持按名称进行域名和项目范围限定。

鉴于这种新的层次结构支持,我们的命名规则将对客户来说变得越来越繁琐。不仅对于具有深度项目层次结构的客户,而且还会使经销商的域名层次结构支持变得复杂。在未来,如果可以使用类似 URL 的寻址方案来寻址层次结构中的节点,这将是理想的,例如

{
    "auth": {
        "identity": {
            ...
        },
        "scope": {
            "project": {
                "domain": {
                    "name": "acme.com"
                },
                "name": "development/sas/myproject"
            }
        }
    }
}

如果我们需要支持域名层次结构,则可以使用相同的寻址方案来处理域名。

然而,我们当前的域名和项目名称并非 URL 安全,因此我们无法保证支持任何特定的层次结构命名方案,而不冒破坏对奇怪命名的项目/域名的访问的风险。

提议的变更

我们建议为所有项目和域名迁移到 URL 安全的命名奠定基础。URL 安全的名称定义为不包含 RFC3986 第 2.2 节中定义的任何 保留 字符的名称 (rfc3986 <http://tools.ietf.org/html/rfc3986>_)。

具体来说,我们将

  • 弃用 URL 不安全的命名,因此对于不安全的名称将记录弃用警告。

  • 提供一个 keystone-manage 选项,以列出任何 URL 不安全的项目或域的 ID 和名称,以便随后可以使用常规 Identity API 更新这些名称。

  • 提供两个配置选项(一个用于项目,一个用于域名)以启用强制执行。这些选项将接受三个值:offnewstrict。默认情况下,这些选项将设置为 off,这意味着行为不会改变。

  • 如果设置为 new,则创建名称不符合 URL 安全标准的新的域名或项目的请求将被拒绝。

  • 如果将配置选项设置为 strict,除了 new 中定义的限制外,任何现有的不安全命名的域名或项目在按项目/域名名称进行范围限定的令牌颁发目的上将被视为禁用。重命名项目或域名将重新启用它。

未来的 Keystone 版本将强化上述内容,朝着配置选项最终被弃用并且 URL 安全的命名永久启用的方向发展。

我们发布的新功能,例如经销商的域名层次结构,可能会坚持在支持该功能之前启用适当的 URL 安全配置选项。

需要明确的是,该提案不会启用实际的层次结构命名使用,而是为我们将来这样做奠定基础。

该提案不排除项目和域名名称使用 Unicode(因为所有 保留 字符在 ASCII 和 Unicode 中编码相同)。但是,为了利用这种扩展字符集进行身份验证或按名称搜索,需要进行额外的更改(用于编码和解码),这超出了本提案的范围。通过允许在定义于此处的严格命名选项中使用 Unicode,我们允许使用 Unicode 的客户尽快“进入严格模式”(从而避免对我们弃用不安全名称造成进一步的阻碍)。

备选方案

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

默认情况下没有,但如果他们想开始强制使用 URL 安全的命名,则可能需要重命名项目或域名。

开发人员影响

实现

负责人

主要负责人

henry-nash

工作项

  • 添加对新配置选项的支持

  • 添加弃用日志记录

  • 添加在创建/更新域名/项目中的检查

  • 添加在身份验证中的检查,以防止范围限定到不安全的实体

  • 为 keystone-manage 添加支持,以列出不安全命名的域名/项目

依赖项

测试

没有,除了单元测试之外

文档影响

对 Identity API 的更改,以明确命名。

参考资料