标准化联合过程

bp generic-mapping-federation

我们建议重新设计联合身份验证过程,以便在身份属性的同时返回一个 user_id。此外,saml2.py 身份验证模块应重命名为 mapped.py,以表明它适用于所有需要将断言的身份属性映射到本地属性的身份验证方法。

问题描述

现有的联合逻辑使用 saml2 身份验证插件通过将受信任的外部身份属性映射到本地身份属性来建立本地 Keystone 身份。现在 Keystone 将支持其他联合协议,因此通过 saml2 插件进行映射没有意义。一些联合身份验证协议已经确定了用户的 ID,这应该由特定协议的子模块利用,而不是映射引擎。

提议的变更

为了解决这个问题,应该进行以下更改

  1. saml2.py 文件应重命名为 mapped.py。

  2. 应从 mapped.py 中删除方法名“saml2”。

  3. 重命名的插件 Saml2 -> Mapped 应该将属性映射和属性提取的逻辑分开。

  4. 提取属性的函数应在断言的属性中返回一个 user_id。

拆分 Mapped 插件的逻辑将允许对插件进行子类化,以处理以与 mod_shib 不同的方式提供属性的协议,同时仍然能够重用映射过滤器实现。然后我们可以使用与所用协议相对应的正确方法名,以便客户端可以轻松确定其行为。

例如,启用 SAML2 和 Open ID Connect 的 Keystone 的配置可能如下所示

[auth]
methods = username, password, saml2, openidc
saml2 = keystone.auth.plugins.mapped.Mapped
openidc = keystone.auth.plugins.mapped.Mapped

假设两种协议都以相同的方式管理属性,因此提取是相同的。如果不是这样,配置可能如下所示

[auth]
methods = username, password, saml2, openidc
saml2 = keystone.auth.plugins.mapped.Mapped
openidc = keystone.auth.plugins.mapped.OpenIDCMapped

其中 OpenIDCMapped 是 Mapped 的子类,它处理其特定的断言数据提取,然后调用 Mapped 类的映射层处理。

备选方案

或者,可以不进行任何更改,但这不可取,因为使用名为 saml2.py 的模块处理非 SAML 断言数据没有意义。

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

开发人员影响

这将迫使开发人员以标准化的方式实现新的联合协议,方法是要求属性提取/检索过程在断言的属性中返回一个 user_id。

实现

负责人

主要负责人

Kristy Siu kwss@kent.ac.uk IRC: kwss

其他贡献者

David Chadwick d.w.chadwick@kent.ac.uk

工作项

  • 重新设计当前的联合过程,以确保断言属性中始终返回一个 user_id。

  • 修改断言数据提取的处理方式,使其适用于多种协议。

  • 将 saml2.py 重命名为 mapped.py,并从该文件中删除方法名“saml2”。

  • 拆分映射和属性断言逻辑,以允许协议特定的子类化。

依赖项

测试

当前的联合测试应该仍然提供覆盖范围。

文档影响

开发文档应说明从外部身份提供商接收的断言属性的提取函数应始终将 user_id 作为断言数据的一部分返回。

参考资料