Keystone 身份映射以支持项目定义为 JSON¶
此规范为 Keystone 身份联合属性映射模式增加了对项目定义为 JSON 的支持
问题描述¶
目前,通过联合身份映射的项目分配是相当静态的。这是因为 Keystone 中现有的查找/替换机制。因此,如果 IdP 生成的属性包含一个带有项目定义的 JSON,我们无法在 Keystone 中处理它。
例如,如果我们有以下属性映射,我们可以将用户映射到 OpenStack 后端中的单个项目。
[
{
"local": [
{
"user": {
"name": "{0}",
"email": "{1}",
"domain": {
"name": "{2}"
}
},
"domain": {
"name": "{2}"
},
"projects": [
{
"name": "{3}",
"roles": [
{
"name": "member"
}
]
}
]
}
],
"remote": [
{
"type": "OIDC-preferred_username"
},
{
"type": "OIDC-email"
},
{
"type": "OIDC-openstack-user-domain"
},
{
"type": "OIDC-openstack-default-project"
}
]
}
]
如前所述,我们能够将用户映射到单个项目。这种限制与这些映射的处理方式有关。如果我们想将用户添加到两个项目,那么我们需要重复两次项目定义,并且所有用户都会一次性添加到两个项目。如果用户分配的项目数量不相等,那么这将不起作用。除非我们创建映射规则来解决所有可能的项目分配数量,而数量是无限的。
提议的变更¶
此 PR 在联合身份映射模式的 projects 属性中引入了一种新的行为。此属性将接受一个 JSON 字符串,该字符串定义了用户登录到 OpenStack 平台时必须接收的所有项目及其特定角色。此外,在使用此扩展程序时,角色(分配给项目)会动态添加和删除。
属性 projects 可以接收字符串或 Python 对象,就像现在一样。如果内容是 Json 编码的字符串,它将根据当前的 projects 对象模式进行验证。这意味着它必须是有效的项目列表结构。
角色分配将是持久的,以便在用户访问系统后方便审计/故障排除。因此,对于每次联合登录,Keystone 持有的关于用户的信息都会更新;这与今天处理用户名、电子邮件等的方式类似。
此扩展非常简单明了。我们创建了一个新的 schema_version (3.0)。这个新版本启用了在属性映射中将 projects 作为 Json 编码的字符串处理。
此外,我们添加了代码来处理项目附加角色的添加以及删除 OpenStack 中存在但 IdP 数据中不存在的角色。这是一种使 OpenStack 联合用户的状态与身份提供商用户属性保持一致的机制。
属性映射模式¶
通过支持将 projects 作为 string,我们使操作员能够使用 IdP 中的属性,这些属性是定义用户必须放置在其中的项目的 Json 字符串。此外,此 JSON 将根据项目定义进行验证。新的选项将在属性映射模式的版本 3.0 中处理。
以下是 projects 变量的 Json 内容的示例。
"[
{\"name\":\"projectACME\",\"roles\":[{\"name\":\"member\"}],
\"domain\":{\"name\":\"domainXYZ\"}
},
{\"name\":\"projectInDefaultDomain\",\"roles\":[{\"name\":\"member\"}]},
{\"name\":\"otherProject\",\"roles\":[{\"name\":\"otherRole\"}],
\"domain\":{\"name\":\"otherDomain\"}
}
]"
使用新属性的可能映射规则如下所示。必须记住,这只是一个示例,不应直接在任何生产环境中使用。创建属性映射规则时,应使用最适合其需求的配置。
[
{
"local":[
{
"user":{
"name":"{0}",
"email":"{1}",
"domain":{
"name":"{2}"
}
},
"domain":{
"name":"{2}"
},
"projects":"{3}"
}
],
"remote":[
{
"type":"OIDC-preferred_username"
},
{
"type":"OIDC-email"
},
{
"type":"OIDC-openstack-user-domain"
},
{
"type":"OIDC-openstack-projects-client-mapper"
}
]
}
]
数据库表更改¶
无
API 影响¶
在属性映射中提供了 projects 的新输入类型选项。只有在将 schema_version 设置为 3.0 时,才会使用此新选项。
负责人¶
- 主要负责人
Rafael <rafael@apache.org>
其他贡献者
工作项¶
在 Keystone 中实施提议的更改 [1]
创建新的映射模式
创建用于提议的更改的新处理器
实施验证和单元测试
Update documentation
依赖项¶
无