身份提供者特定的 WebSSO¶
目前 Keystone 处理 WebSSO 的方式是针对 Keystone 实例中的每种协议全局的。 这需要在 Keystone 之上实现某种网页发现服务,以便用户可以选择他们的提供者。
在更简单的部署中,我希望能够配置多个 SAML 提供者,这些提供者可以从 Horizon 下拉菜单中选择,而不是使用额外的服务。
问题描述¶
目前 WebSSO 在 Keystone 中以全局方式配置。 您必须为 /v3/auth/OS-FEDERATION/websso 选择一个处理程序,使用单个 Apache 模块,该路由应该提供某种处理程序,通常涉及 IdP 发现和选择,然后重定向到实际的 IdP 处理程序。
为了处理多个 IdP,这依赖于 Apache 模块具有发现能力,并且部署者构建一个显示可用替代方案的网页。
如果您的 IdP 列表相对静态,那么让 Horizon 处理它会更好。 它已经有一个下拉选择,可以让你选择身份提供者,并且能够配置单独的身份提供者显示在那里会很有用。 我应该能够选择 Google 或 Facebook 作为我的 IdP,而无需关心从 Keystone 的角度来看它们都使用 SAML。
提议的变更¶
除了 /v3/auth/OS-FEDERATION/websso/{protocol} 路径之外,我们还在 /v3/auth/OS-FEDERATION/identity_providers/{idp_ip}/protocol/{protocol_id}/websso 添加了一个类似的处理器。 与其是动态的,使用 remote-id 查找相关的 IdP,这个路由将仅由 URL 中指定的 IdP 处理。
这将允许为 CLI 完成的 /v3/auth/OS-FEDERATION/identity_providers/{idp_ip}/protocol/{protocol_id} 配置也处理 websso 情况。
备选方案¶
我们可以继续使用全局方法。
安全影响¶
这比当前方法更安全。 当 websso 请求返回到 Keystone 时,全局处理程序断言已配置的 Apache 模块已验证了请求。 如果我同时拥有 Google 和 Facebook SAML 提供者,我必须针对两者进行验证,然后我们使用 Keystone IdP 的 remote-ids 参数来确保发出断言的 URL 是其中已知的,并且我们通过这种方式发现映射。
通过此更改,我们将为针对 Google 或 Facebook 发起 websso 拥有单独的 URL,并且 Apache 模块配置为仅允许来自已配置的 remote IdP 的断言。
通知影响¶
无
其他最终用户影响¶
这将在 django_openstack_auth 中配置。 它不会直接被用户使用。
性能影响¶
无
其他部署者影响¶
这可能会改变您为 Keystone 配置 Apache 的方式。 如果您还通过命令行启用联合身份验证,它将简化它,因为您只需要配置一个位置,而不是一个用于 CLI 和一个用于 websso。
开发人员影响¶
讨论将影响在 OpenStack 上工作的其他开发人员的事情,例如
如果蓝图提出对驱动程序 API 的更改,则需要讨论其他后端将如何实现该特性。
实现¶
负责人¶
- 主要负责人
jamielennox
- 其他贡献者
marekd lbragstad
工作项¶
在 Keystone 中添加一个 /v3/auth/OS-FEDERATION/identity_providers/{idp_ip}/protocol/{protocol_id}/websso 路径。
允许配置 django_openstack_auth 以使用单个 IdP websso 机制,而不是全局端点。
依赖项¶
无
文档影响¶
记录新的 URI。