SSO - 在基于角色的应用程序的情况下,我们是否始终需要将用户数据库保留在 IdP 和 SP 中

SSO - Do we always need to keep user database at IdP and SPs in case of role based application

我打算使用 simplesamlphp 作为 IdP。我有合理数量的用户数据库,他们 "can" 共享 5 个不同的应用程序。

目前,用户必须继续每个应用程序并输入用户名和密码,这肯定不是我想要的。解决方案是保持单独的身份验证服务器并使用 SSO 为 5 个不同的应用程序提供服务(作为服务提供商)。

尽管应用程序可以共享相同的用户数据库,但服务完全不同并且它们严重依赖用户角色。让我们以两个应用程序为例:SP1 和 SP2

SP1 在 laravel 和基于角色的系统中。在任何时候,一个用户可以拥有 5-6 个角色,具体取决于应用程序的功能/提供的信息。

SP2 完全不同,它可能只是 drupal 中的一个博客站点,我们希望在其中收集用户数据。我们将在此处设置最低角色要求。

当用户进入 SP1 并尝试访问受限页面时,他们将重定向到可以对用户进行身份验证的 IdP。如果用户在 IdP 中不存在,它将 return false;否则 return 返回 SP1 并提供一些相关属性。让我们假设,对于 SP1,这是一个最新的用户,我们可以选择将该用户保存在 SP1 数据库中(实际上我们应该将该用户绑定到 SP1 特定角色)但是,我们将用户存储在两个地方:IdP 和SP1.

...SP2 也是如此。在这种情况下,我们将用户存储在总共 3 个位置:IdP、SP1 和 SP2。我们得到的唯一好处是,用户不必向 SP2 输入用户名和密码,它由我们的 IdP 自动处理。

问题

  1. 我需要在 SP1 和 SP2 中存储用户吗?如果没有,那么我该如何处理所有特定于角色的功能。
  2. 如果没有,那么如何初始化用户会话并分配 SP 特定角色?基于 SAML 属性?

SAMLv2 没有授权的概念,它是一种用于 cookieless web-based SSO 的技术。 XACML 将是一种用于授权/细粒度访问控制/授权的 standards-based 技术。

大多数应用程序都缺乏将内部 RBAC 系统映射到外部系统的能力。

如果您依赖 SAML 断言中的信息,例如属性声明(通常是这样做的方式),那么您需要通过某种方式将属性值映射到应用的角色。如果无法更改应用程序以实现此类映射,您需要以某种方式提供身份和角色分配。

通常,IdP 实现允许为每个 SAML SP 实体指定不同的属性映射。