确定要用于联盟 SSO 的 IdP
作为服务提供者,在触发联合 SSO 操作时,有时主要挑战在于确定为 SSO 流选择哪个 IdP(如果 SP 与多个 IdPs 建立了信任协议)。
OAM/SP 为联盟 SSO 操作选择 IdP 的机制不同,包括:
-
使用 OAM 联盟方案指示要使用的 IdP
-
使用定制 OAM 验证插件设置要使用的 IdP
-
使用 SAML 2.0 IdP 搜索服务(如果方案或定制插件既未指定 IdP)
-
如果没有使用 IdP 搜索服务,则使用默认 SSO IdP
以下部分详细介绍了每个机制。
OAM 联盟方案
OAM 提供了用于创建 OAM 验证方案的管理工具,该方案将:
-
联盟方案
-
绑定到特定的 IdP 合作伙伴
当使用这种验证方案保护资源时,如果未验证的用户请求访问,将使用方案绑定到的 IdP 合作伙伴触发联盟 SSO 流。
通过创建此类方案,管理员可以拥有特定的资源,从而获得具有特定 IdP 合作伙伴的联盟 SSO。
注:如果用户已通过级别足够强的有效会话进行验证,则访问受其他联盟方案保护的资源可能会导致新联盟 SSO。
OAM 管理控制台
要为特定的 IdP 合作伙伴创建 OAM 验证方案,请执行以下步骤:
-
转到 OAM 管理控制台:
http(s)://oam-admin-host:oam-adminport/oamconsole。 -
导航到 Identity Federation,Service Provider Administration 。
-
打开要为其创建方案的 IdP 合作伙伴。
-
单击 Create Authentication Scheme and Module 按钮。

OAM 管理控制台将创建:
-
绑定到此 IdP 合作伙伴的名为
<PARTNER_NAME>FederationPlugin的 OAM 验证模块。 -
绑定到名为
<PARTNER_NAME>FederationScheme的新创建的 OAM 验证模块的 OAM 验证方案。

插图 OAM_Admin_Console_with_message.jpg 的说明
WLST 命令
要使用 OAM WLST createAuthnSchemeAndModule() 命令为特定 IdP 合作伙伴创建 OAM 验证方案,请执行以下步骤:
-
通过执行:
$IAM_ORACLE_HOME/common/bin/wlst.sh进入 WLST 环境。 -
连接到 WLS 管理服务器:
connect()。 -
导航到域运行时分支:
domainRuntime()。 -
执行
createAuthnSchemeAndModule()命令:指定 IdP 合作伙伴名称。例如:createAuthnSchemeAndModule("AcmeIdP")。 -
退出 WLST 环境:
exit()。
注:要删除此类联盟方案/模块,请执行 OAM WLST
deleteAuthnSchemeAndModule()命令。
保护资源
要使用 <PARTNER_NAME>FederationScheme 来触发该特定 IdP 合作伙伴的联盟 SSO 的资源,请执行以下步骤:
-
转到 OAM 管理控制台:
http(s)://oam-admin-host:oam-adminport/oamconsole。 -
导航到 Access Manager,Application Domain 。
-
单击搜索,然后使用新的
FederationScheme打开包含要保护的资源的应用程序域。 -
单击验证策略选项卡。
-
创建新的验证策略或编辑现有策略。
-
选择新的
FederationScheme。 -
单击应用。

插图 Authentication_Policies.jpg 的说明
进行此更改后,只要用户请求受此验证策略保护的资源并且需要对用户进行验证,就会使用特定的 IdP 合作伙伴(在此示例中为 AcmeIdP)执行联盟 SSO。
自定义 OAM 验证插件
概述
OAM 验证模块为:
-
验证插件的集合
-
确定插件执行顺序的业务流程
OOTB 联盟验证模块(称为 FederationPlugin)由两个插件组成:
-
FedAuthnRequestPlugin :启动联合 SSO 流,确定要使用的 IdP,创建 SSO 请求并将用户重定向到 IdP
-
AssertionProcessing :处理传入的 SAML/OpenID SSO 响应并将消息映射到 LDAP 目录中的本地用户记录
可通过以下方式查看该编排:
-
转到 OAM 管理控制台:
http(s)://oam-admin-host:oam-adminport/oamconsole。 -
导航到访问管理器,验证模块。
-
打开
FederationScheme。 -
单击步骤选项卡以查看插件。
-
单击步骤业务流程选项卡以查看不同插件与用于启动操作的插件之间的业务流程。

插图 Steps_Orchestration.jpg 的说明
实现定制插件
可以基于 OAM 定制验证插件框架实施定制插件,该框架确定要用于特定联盟 SSO 操作的 IdP:
-
该插件确定需要通过特定方法使用的 IdP(Cookie、通过页面进行用户选择、编程 ...)
-
选择完成后,插件需要在保存在
AuthenticationContext中的身份证明实例中保存 IdP 合作伙伴名称 -
该插件返回成功状态
-
OAM 调用下一个插件 (
FedAuthnRequestPlugin),该插件从AuthenticationContext中检索 IdP 合作伙伴名称 -
联盟 SSO 以该 IdP 启动
在 AuthenticationContext 中保存 IdP 合作伙伴名称的代码与以下代码类似:
public ExecutionStatus
process(AuthenticationContext context)
{
...
CredentialParam param = new CredentialParam();
param.setName("KEY_FEDIDP");
param.setType("string");
param.setValue(IDP_PARTNER_NAME);
context.getCredential().addCredentialParam("KEY_FEDIDP", param);
...
return ExecutionStatus.SUCCESS;
}
实施插件后:
-
它需要打包、上载、分发和激活
-
需要使用三个插件创建新的验证模块
-
定制插件
-
FedAuthnRequestPlugin
-
AssertionProcessing
-
-
业务流程需要设置以下项:
-
作为初始步骤自定义插件的自定义插件:
-
成功时,调用
FedAuthnRequestPlugin -
失败时,错误时返回失败
-
-
FedAuthnRequestPlugin:
-
成功时,应返回成功
-
失败时,应调用 AssertionProcessing
-
出错时,应返回故障
-
-
定制插件:
-
成功时,应返回成功
-
失败时,应该在出错时返回故障,并返回故障
-
-
-
应使用新的 OAM 验证模块创建新的 OAM 验证方案。新方案应类似于 OOTB FederationScheme。
最后,可以使用新的 OAM 方案来保护资源,该方案使用定制验证模块/插件来执行联盟 SSO 操作。
注意:请参阅 OAM Developer 指南中有关定制插件的更多信息。
IdP 搜索服务
概述
“身份提供者搜索服务协议和配置文件”SAML 2.0 规范定义了 SAML 2.0 SP 将 IdP 选择委派给远程服务的方法。
此流在 SAML 2.0 规范中进行了介绍,并由以下步骤组成:
-
SP 配置为使用远程 IdP 搜索服务来确定要用于联盟 SSO 操作的 IdP。
-
SP 通过 302 HTTP 重定向将用户重定向到 IdP 搜索服务并在查询字符串中提供以下参数。
-
entityID:OAM/SP 的发布者/ProviderID -
returnIDParam:将用户重定向回 OAM/SP 时,服务需要用于包含 IdP ProviderID 值的参数的查询字符串参数的名称 -
return:用于将用户重定向到 OAM/SP 的 URL
-
-
该服务确定要使用的 IdP
-
服务会根据 SP 指定的查询参数“返回”通过 302 HTTP 重定向将用户重定向到 OAM/SP,并在查询字符串中提供以下参数。
-
包含 IdP ProviderID 值的查询参数;该查询参数的名称由 returnIDParam 查询参数中的 SP 指定。
-
配置 OAM/SP
您可以将 OAM/SP 配置为使用任何远程 IdP 搜索服务。OAM 包括一个简单的 IdP 搜索服务,该服务使用户能够选择使用哪个 IdP 执行联盟 SSO。要将 OAM/SP 配置为使用 IdP 搜索服务,请执行以下步骤:
-
通过执行
$IAM_ORACLE_HOME/common/bin/wlst.sh进入 WLST 环境。 -
连接到 WLS 管理服务器:
connect()。 -
导航到域运行时分支:
domainRuntime()。 -
启用/禁用 OAM/SP 以使用 IdP 搜索服务:
putBooleanProperty("/spglobal /idpdiscoveryserviceenabled", "true/false")。-
要启用:
putBooleanProperty("/spglobal /idpdiscoveryserviceenabled", "true") -
禁用
putBooleanProperty("/spglobal /idpdiscoveryserviceenabled", "false")
-
-
设置远程 IdP 搜索服务的位置:
putStringProperty("/spglobal /idpdiscoveryserviceurl", "URL")。 -
使用服务位置替换 URL。
-
对于捆绑的简单 IdP 搜索服务,请将 URL 替换为
/oamfed/discovery.jsp(这是此属性的 OOTB 值):putStringProperty("/spglobal /idpdiscoveryserviceurl", "/oamfed/discovery.jsp")。 -
对于远程服务,示例为:
putStringProperty("/spglobal /idpdiscoveryserviceurl", "http://sp.com/discovery")。
-
-
退出 WLST 环境:
exit()。
要使用捆绑的简单 IdP 搜索服务,请执行以下步骤:
-
通过执行
$IAM_ORACLE_HOME/common/bin/wlst.sh进入 WLST 环境。 -
连接到 WLS 管理服务器:
connect()。 -
导航到域运行时分支:
domainRuntime()。 -
启用/禁用捆绑的 IdP 搜索服务:
putBooleanProperty("/spglobal /idpdiscoveryservicepageenabled", "true/false")。-
要启用:
putBooleanProperty("/spglobal /idpdiscoveryservicepageenabled", "true")。 -
禁用
putBooleanProperty("/spglobal /idpdiscoveryservicepageenabled", "false")。
-
-
退出 WLST 环境:
exit()。
测试
在我的测试环境中,我有三个 IdPs:
-
AcmeIdP:SAML 2.0 IdP
-
Google:Google OpenID OP
-
Yahoo: Yahoo OpenID OP
OAM/SP 配置为:
-
使用 IdP 搜索服务
-
将用户重定向到捆绑的简单 IdP 搜索服务
-
启用捆绑的简单 IdP 搜索服务
如果用户请求访问受 FederationScheme 保护的资源,则捆绑的简单 IdP 搜索服务会提示用户选择 IdP 以使用以下项执行联合 SSO:

默认 SSO 身份提供方
如果以前的方法都不用于指示要用于联盟 SSO 的 IdP,则 OAM/SP 将使用标记为默认 SSO 身份提供者的 IdP 合作伙伴。
OAM 管理控制台
要指示特定的 IdP 合作伙伴应当通过 OAM 管理控制台成为默认 SSO 身份提供者,请执行以下步骤:
-
转到 OAM 管理控制台:
http(s)://oam-admin-host:oam-adminport/oamconsole。 -
导航到 Identity Federation,Service Provider Administration 。
-
打开 IdP 合作伙伴。
-
选中默认身份提供方合作伙伴框。
-
单击应用。

插图 Default_Identity_Provider.jpg 的说明
WLST 命令
要使用 OAM WLST setDefaultSSOIdPPartner() 命令指示特定的 IdP 合作伙伴应为默认 SSO 身份提供者,请执行以下步骤:
-
通过执行
$IAM_ORACLE_HOME/common/bin/wlst.sh进入 WLST 环境。 -
连接到 WLS 管理服务器:
connect()。 -
导航到域运行时分支:
domainRuntime()。 -
执行
setDefaultSSOIdPPartner()命令。 -
指定 IdP 合作伙伴名称 例如:
setDefaultSSOIdPPartner("AcmeIdP")。 -
退出 WLST 环境:
exit()。
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或在 Oracle Learning YouTube 频道上访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Determining which IdP to use for Federation
F60233-01
September 2022
Copyright © 2022, Oracle and/or its affiliates.