OAM 中的联盟代理和 IdP
本文介绍了联盟代理的概念,以及如何轻松地将 IdP 配置为 SP 并将验证委托给另一个远程 IdP,而不是在本地验证用户。
联盟代理通常在以下情况下使用:
-
SP 合作伙伴的 IdP,其中 IdP 聚合了这些 SP 与自身之间的联盟信任
-
具有远程 IdP 合作伙伴的 SP
此方法的优势如下:
-
降低信任管理开销
-
添加到联合集线器的每个新 IdP 合作伙伴将自动提供给与联盟集线器集成的所有 SP 合作伙伴
-
添加到联合集线器的每个新 SP 合作伙伴都不需要在 IdP 合作伙伴中定义
-
提供分层联盟信任模型,联邦中心将联邦部署隐藏到 IdP 合作伙伴
直接信任模型
在此模型中,各种联盟服务器直接相互信任,没有充当代理的中间实体。
此模型具有降低联盟流的复杂性的优势,因为只有两台服务器参与了 SSO 操作,但有时会产生合作伙伴可能不同意的巨大管理开销。
我们举一个名为 ACME Corp 的全球性公司的例子,该公司在全球设有办事处。该公司的结构由代表全球不同区域的三个顶级组织组成,每个组织负责其安全域:
- 北美和南美人
- 欧洲人
- 亚非太平洋地区
每个组织都有自己的安全域,这意味着:
- 一组资源
- SSO 服务器
- 联盟服务器 一个组织的实体独立于另一个组织的实体。因此,在一个域中进行验证不会授予您对另一个域资源的访问权限,除非在该域中执行了验证。
现在,假设 ACME Corp 希望与一些服务提供商达成联邦协议,其中一些是供应商,其他是 ACME Corp 购买的服务,例如会议呼叫服务,以及 Webex 服务。
为了在各个 ACME Corp 组织与 SP 之间建立联盟,每个组织的联盟服务器必须与每个远程 SP 建立信任:
-
信托机构数必须很高
-
SP 合作伙伴可能会拒绝这种信任机构,因为单个客户涉及大量的联邦协议
下图显示了需要实施的所有协议:

这种方法通常可以避免,因为它向合作伙伴发布了 ACME Corp 基础设施的内部复杂性。
联盟 SSO 和 SAML 被定义为允许两个不同的安全域以一个合作伙伴无需了解其他合作伙伴的安全实施和部署的方式执行跨域 SSO。在这种情况下,很明显,这一承诺被打破,ACME Corp 的安全选择的复杂性正在影响 SP 合作伙伴。
经纪信任模型
在此模型中,存在联盟代理的概念,其中一些实体必须用作代理/SP 才能代表其他 SP 执行联盟 SSO 操作。
如果我们再次以 ACME Corp 的示例为例,则与其他 SP 合作伙伴实施联合 SSO 的正确方法是通过“Brokered Trust”模型或“Federal Proxy”,其中:
-
将在充当联盟集线器的 ACME Corp 中安装新服务器
-
联盟中心充当 ACME Corp 内部 IdPs 的服务提供商
-
联盟中心充当外部 SP(供应商、电话会议和 webex)的 IdP
-
在联盟 SSO 操作期间,集线器不直接挑战用户,而是充当 SP 并使用远程内部 IdP 触发联盟 SSO 操作
这种方法更符合联邦/SAML 的理念,即外部合作伙伴不了解 ACME Corp 的安全基础设施和组件,并且只与单个 IdP 交互。
此解决方案还解决了协议数量特别高的高管理开销,并且对协议的任何更新都是一个漫长的过程。使用此方法:
-
联盟协议位于集线器与内部 IdPs 之间,以及集线器与外部 SP 之间
-
添加内部 IdP 对外部 SP 不可见
-
添加外部 SP 对内部 IdPs 将不可见
-
更新联盟协议(例如,密钥滚转)将是一项一次性操作,而不是多次重复
下图显示了代理信任(或联盟代理)模型中所需的联盟协议:

插图 Brokered_Trust_Model.jpg 的说明
OAM 中的联盟代理
联盟代理中的目标是将 IdP 转换为 SP,以便在收到来自第一个远程 SP 的 SSO 请求时,IdP 将成为 SP,并使用第二个远程 IdP 触发新的联盟 SSO 操作,而不是在本地质询用户。
第二个联盟 SSO 操作成功完成后,代理 IdP 将标识用户,并可以为原始 SP 创建 SSO 响应。
OAM 支持所有协议的立即联合代理:
-
SAML 2.0、SAML 1.1 和 OpenID 2.0
-
原始 SP 和 IdP 之间的协议与 OAM/SP 和第二个远程 IdP 之间使用的协议相同
-
原始 SP 和 IdP 之间的协议不同于 OAM/SP 与第二个远程 IdP 之间使用的协议
因此,SP 可以通过 SAML 1.1 使用 IdP 执行联合 SSO,而 IdP 成为 SP,并通过 SAML 2.0 使用第二个远程 IdP 执行联合 SSO。原始 SP 不需要知道 OAM/SP 与第二个 IdP 之间使用的协议,甚至不需要知道发生了第二次联合 SSO 操作。
在联盟立即代理中,可以将 IdP 配置为将第二个联盟 SSO 中指定的联盟验证方法“转发”到原始 SP。
为联盟代理配置 OAM
如前文所述,IdP 利用 OAM 进行用户验证:每次执行联合 SSO 操作时,IdP 将通过指定验证方案来调用 OAM,以确保用户经过充分的验证,并在必要时询问该用户。
如您所知,OAM 定义与 OAM/SP 关联的特定方案:如果未验证的用户请求访问受 FederationScheme 保护的资源(或使用类似 FederationPlugin 的验证模块的方案),OAM 将调用 OAM/SP,该 OAM/SP 将使用远程 IdP 触发联盟 SSO 操作。
因此,要使 IdP 立即执行联合代理,而不是让 IdP 使用本地验证方案调用 OAM,您必须使用 FederationScheme 调用 IdP OAM。从此处:
-
OAM 调用 OAM/SP,它使用第二个远程 IdP 触发新的联合 SSO
-
第二个远程 IdP 根据需要验证用户,发出 SSO 响应
-
OAM/SP 验证 SSO 响应,创建 OAM 会话
-
OAM 将用户重定向到 IdP
-
IdP 创建 SSO 响应并将用户重定向到具有该响应的原始 SP
WLST 命令
要将 IdP 配置为使用联盟 SSO 来验证用户而不是本地验证机制,请执行以下命令之一:
-
setIdPDefaultScheme()将全局默认方案设置为联盟方案 -
setSPPartnerProfileDefaultScheme(),用于设置 SP 合作伙伴概要信息上的默认方案 -
setSPPartnerDefaultScheme(),用于设置 SP 合作伙伴的默认方案
有关如何配置 OAM 进行验证的更多信息,请参见 IdP 中有关验证的文章。在此示例中,将 IdP 全局配置为使用联盟 SSO 作为默认验证机制:
-
通过执行
$IAM_ORACLE_HOME/common/bin/wlst.sh进入 WLST 环境。 -
连接到 WLS 管理服务器:
connect()。 -
导航到域运行时分支:
domainRuntime()。 -
执行
setIdPDefaultScheme()命令:setIdPDefaultScheme("FederationScheme")。 -
退出 WLST 环境:
exit()。
进行此更改后,FederationScheme 用于验证用户。
其他联盟方案可用于验证用户,其中 OAM 配置为全局级别(所有 SP 的所有用户均使用该联盟方案进行验证)或 SP 合作伙伴级别(使用该联盟方案验证使用特定 SP 执行联盟 SSO 的所有用户)。请记住,可以通过 OAM WLST createAuthnSchemeAndModule 命令或通过 OAM 管理控制台中的“编辑 IdP 合作伙伴”部分为特定的 IdP 创建联盟方案。
确定要使用的第二个 IdP
当在 OAM 中使用联盟方案进行验证时,OAM/SP 将需要确定要用于联盟 SSO 操作的 IdP:
-
如果方案是从 IdP 合作伙伴条目创建的方案,则它指示 OAM/SP 使用该 IdP 执行联盟 SSO
-
如果方案为
FederationScheme,则 OAM/SP 首先评估它是否配置为使用 IdP 搜索服务 -
如果为 IdP 搜索服务配置了该服务,则 OAM/SP 会将用户重定向到该服务以选择 IdP
-
否则,OAM/SP 使用默认 SSO IdP
要将 IdP 合作伙伴设置为默认 SSO IdP:
-
转到 OAM 管理控制台中的 IdP 合作伙伴并勾选默认身份提供者合作伙伴框
-
或者通过指定 IdP 合作伙伴名称使用 OAM WLST setDefaultSSOIdPPartner() 命令
代理联盟验证方法
如前文中所述,当 IdP 构造断言时,它将用于验证用户的本地 OAM 方案映射到联盟验证方法。
对于联盟 SSO 代理,这意味着 FederationScheme 映射到联盟验证方法。例如,如果需要将 SAML 2.0 的方案映射到 urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport,则管理员使用类似于以下内容的命令:
-
要在 SP 合作伙伴概要信息级别创建映射:
addSPPartnerProfileAuthnMethod("saml20-sppartner-profile","urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport", "FederationScheme") -
要在 SP 合作伙伴级别创建映射:
addSPPartnerAuthnMethod("AcmeSP","urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport ", "FederationScheme")
在某些情况下,最好转发从第二个 IdP 接收的联盟验证方法,而不是在本地将联盟方案映射到联盟验证方法。
配置 IdP 以转发联盟 SSO 代理中的联盟验证方法。
现在,使用 useProxiedFedAuthnMethod() 命令:
-
通过执行
$IAM_ORACLE_HOME/common/bin/wlst.sh进入 WLST 环境。 -
连接到 WLS 管理服务器:
connect()。 -
导航到域运行时分支:
domainRuntime()。 -
执行
useProxiedFedAuthnMethod()命令:useProxiedFedAuthnMethod(enabled="true/false",authnSchemeToAdd="SCHEME", authnSchemeToRemove="SCHEME")。 -
enabled 参数指示是否应将 IdP 配置为立即转发联盟 SSO 代理中的联盟验证方法
-
authnSchemeToAdd参数指示哪个 OAM 验证方案是联盟方案:这允许 IdP 根据用户会话的验证方案确定是否使用高速缓存的联盟验证方法 -
authnSchemeToRemove参数从标记为联盟方案的方案列表中删除 OAM 验证方案,对于这些方案,IdP 应使用代理联盟验证方法 -
例如:
useProxiedFedAuthnMethod(enabled="true", authnSchemeToAdd="FederationScheme") - 退出 WLST 环境:
exit()。
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或在 Oracle Learning YouTube 频道上访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Federation Proxy in OAM and IdP
F60446-01
September 2022
Copyright © 2022, Oracle and/or its affiliates.