LDAP 与 SAML 授权

Posted

技术标签:

【中文标题】LDAP 与 SAML 授权【英文标题】:LDAP vs SAML Authorization 【发布时间】:2014-05-18 23:02:12 【问题描述】:

我目前正在研究将资产跟踪系统从 LDAP 迁移到 SAML。我们的软件目前在两个主要领域使用 LDAP。首先是身份验证。为了今天访问系统,您需要成功通过 LDAP 进行身份验证并成为指定 LDAP 组的成员。这部分很容易转移到 SAML。我们使用了一个库来处理大部分脏活。在 IDP 上,我们可以添加声明以授权用户。但是我们对 LDAP 的第二次使用让我陷入了困境。

今天,我们维护的每项资产都可以链接到用户名。例如,特定的打印机可能属于“某个用户”。我们的软件为管理员提供的选项之一是基于 LDAP 用户组查看资产/与资产交互。因此,作为管理员,我可能想要更新特定部门人员拥有的所有打印机。为此,管理员将创建一个范围为 LDAP 组“departmentInQuestion”的规则。然后,我们的软件将使用服务帐户连接到 LDAP,创建查询以查看我们系统中的哪些用户在“departmentInQuestion”中,执行该查询并使用结果来确定哪些资产应该获得更新。

到目前为止,我还没有找到与此类似的 SAML 工作流程。看来我们必须评估“某些用户”的唯一机会是当他们进行身份验证并且我们可以访问他们的声明时。但在我们的工作流程中,“某些用户”可能永远不会向我们进行身份验证。这几乎就像我们代表服务帐户使用授权用户一样。在探索过程中是否存在我忽略的现有工作流程?有没有其他技术支持这种方式的授权?

感谢您的任何意见!

【问题讨论】:

【参考方案1】:

SAML 就像护照或签证。它具有关于您的(可信)信息,可用于了解您(例如您的姓名、出生日期)并推断您可以访问什么(例如进入某个国家/地区)。您可以使用令牌中的属性向其他系统查询您可能关联的其他信息(例如您的银行对帐单)。

因此,类似地,SAML 通常用于对系统的用户进行身份验证(一旦您信任它的来源),但没有用于管理用户配置文件或“资源”的规定。

授权决定(如果有)通常基于与用户关联的属性(例如他所属的组)并在安全令牌的声明中传达。

也许要回答的第一个问题是您为什么要摆脱 LDAP 并考虑 SAML。是因为您想接受用户使用自己的凭据登录吗?是不是因为你想完全摆脱 LDAP 服务器

您完全可以保留 LDAP 服务器来管理 resources associated with users,并在其他地方验证用户。这就是你现在所拥有的。您可以通过通用属性(例如用户名或某个 ID)关联“外部”和“内部”用户。

如果您想完全摆脱 LDAP,那么您需要在其他地方存储该信息(例如您的应用数据库)。

【讨论】:

【参考方案2】:

以Eugenio Pace 的回复为基础,尤其是在本段之后:

因此,类似地,SAML 通常用于对系统的用户进行身份验证(一旦您信任它的来源),但没有用于管理用户配置文件或“资源”的规定。

授权决定(如果有)通常基于与用户关联的属性(例如他所属的组)并在安全令牌的声明中传达。

Eugenio 在这里指的是 ABAC——基于属性的访问控制。 SAML 不这样做。要实现 ABAC,您需要 XACML。 SAML 和 XACML 都是 OASIS 定义的标准并且可以互操作。使用 XACML,您可以定义基于属性的规则。例如,我们可以重新访问您的示例并编写如下规则:

具有role==administrator 的用户可以对以下资源执行action==update type==打印机当且仅当用户部门 == 打印机部门

您可以在这些参考网站上阅读有关 ABAC 上 XACML 的更多信息:

NIST 在 ABAC 上的 site。 OASIS XACML Technical Committee

【讨论】:

SAML 还允许一个抽象层,以便可以在不影响授权过程的情况下更改后端数据存储。 (即从一个 LDAP 源更改为另一个或使用数据库)-jim

以上是关于LDAP 与 SAML 授权的主要内容,如果未能解决你的问题,请参考以下文章

Confluence 6 数据中心的 SAML 单点登录最佳实践和故障排除

Confluence 6 数据中心的 SAML 单点登录最佳实践和故障排除

认证与授权——单点登录协议盘点:OpenID vs OAuth2 vs SAML

基于 SAML 断言授权的 SAML2 身份验证

基于 Confluence 6 数据中心在你的 Atlassian 应用中配置 SAML 授权

基于 Confluence 6 数据中心在你的 Atlassian 应用中配置 SAML 授权