SAML 使用方案
通过四个基本使用方案描述了 SAML 功能。前三个方案说明了使用策略集配置的 Web Service 单点登录。第四个方案描述了定制 SAML 单点登录,您可以使用 SAML API 和信任客户机 API 来构建 SAML 单点登录。这些方案说明了使用 SAML 构建块和 API 向安全性令牌服务 (STS) 进行认证、请求 SAML 令牌以及实行 SAML 令牌以获取对于业务服务的访问权。
概述
具有 SAML 的 WebSphere® Application Server 提供了构建块和 API,使您能够使用 SAML 令牌来创建单点登录和身份联合业务解决方案。SAML 策略集是用于配置 Web Service 应用程序以请求 SAML 令牌、在 SOAP 消息中传播 SAML 令牌以及验证和认证 SAML 令牌的构建块,所有这些构建块连一行编程都没有。
通过使用 SAML 和 WS-Trust 客户机 API,您可以按程序创建 SAML 令牌、解析和验证 SAML 令牌以及认证从协议接收到的除 Web Service SOAP 消息之外的 SAML 令牌。具体来说就是使用 SAML API 来处理定制 SAML 令牌属性、创建个性化的应用程序界面以及执行基于声明的授权。使用 WS-Trust 客户机 API 从 STS 请求 SAML 令牌或者其他类型的令牌,以及验证安全性令牌和与 STS 交换安全性令牌。
WebSphere Application Server 产品中不包括用于发出 SAML 令牌或者任何其他类型的安全性令牌的 STS。但是,具有 SAML 的 WebSphere Application Server 确实会与 Tivoli® Federated Identity Manager 和其他第三方提供的 STS 实现进行互操作。
方案 1:Web Service 单点登录 (SSO)
在此单点登录 (SSO) 使用方案中,用户向 STS 进行认证并使用 Bearer 确认方法来请求 SAML 令牌。然后,该用户使用 SAML 令牌来访问业务服务提供程序。业务服务提供程序对 SAML 令牌进行验证,并根据业务服务提供程序与发放 SAML 令牌的 STS 之间的信任关系来声明该用户的身份和属性。如果业务服务提供程序信任令牌签名证书,并且令牌的到期时间短于业务服务提供程序的当地时间与可配置的时钟偏差之和,那么认为接收到的 SAML 令牌有效。
业务服务提供程序可以代表用户使用 SAML 令牌并根据服务的策略配置来访问下游服务。通过使用策略配置,业务服务提供程序根据原始用户属性来传播原始 SAML 令牌或者生成自发放的 SAML。有关如何为此方案配置策略集和绑定的详细描述,请阅读有关为 SAML 不记名令牌配置客户机和提供者绑定的信息。
相对于其他 SSO 技术而言,使用 SAML 不记名令牌进行单点登录具有优势,这是因为 SAML 是符合业界标准的安全性令牌,并且多个供应商产品都支持 SAML。此外,通过 WebSphere Application Server 实现的 SAML 功能与 Tivoli Federated Identity Manager、DataPower® 和其他供应商产品进行互操作。

您可以将调用者绑定添加至 SAML 提供者样本绑定,以选择所接收到的表示调用者身份的 SAML 令牌。当您使用缺省 JAAS 登录配置 system.wss.caller 时,Web Service 安全性运行时环境使用 SAML NameId 来表示客户机身份以及从所配置的用户注册表中搜索用户安全性名称和组成员资格。
成功执行此方案之后,WS-Security 运行时环境将保存 SAML 令牌,在这些 SAML 令牌仍然有效的情况下,可以复用它们来访问同一业务服务提供程序。如果令牌到期时间短于高速缓存时间段(可以配置此时间段),那么令牌有效。如果业务服务提供程序已验证和认证所接收到的 SAML 令牌,那么 JAAS 主体集以及相应的 SAML 令牌会立即保存在认证高速缓存中。无论令牌到期时间如何,SAML 令牌在主管应用程序服务器中都将保持有效。这意味着 WS-Security 运行时环境在同一进程中不会检查 SAML 令牌到期时间,因为只要 SAML 令牌在认证高速缓存中,它们在应用程序服务器进程中就会保持有效。
当业务服务提供程序使用 SAML 令牌来调用下游服务时,系统就会检查 SAML 令牌到期时间。如果 SAML 令牌到期时间不短于添加至高速缓存时间段的当前时间,那么出站请求将失败。当策略配置需要使用原始 SAML 令牌时,也存在此局限性。但是,如果策略配置改为使用自发放的 SAML 令牌(例如,业务服务提供程序已创建原始 SAML 令牌的复制品并且已对其签名),那么不存在此局限性。
方案 2:要进行“密钥拥有者”验证的 Web Service 单点登录 (SSO)
要进行“密钥拥有者”验证的单点登录使用方案与前面的 SSO 使用方案相似。进行“密钥拥有者”验证的 SSO 方案将使用那些采用“密钥拥有者”(HoK) 确认方法而不使用 Bearer 确认方法的 SAML 令牌。SAML HoK 令牌包含一个密钥,客户机使用此密钥来证明密钥的所有权和令牌的所有权。此嵌入式密钥可以是共享密钥(也称为对称密钥)或者是具有公用密钥的 X.509 证书(也称为非对称密钥)。对于共享密钥,使用目标业务服务提供程序的公用密钥对此密钥进行了加密,以便只有所需要的业务服务才能使用 SOAP 消息。
当客户机从 STS 请求使用 HoK 共享密钥的 SAML 令牌时,STS 将对 SAML 令牌中的密钥进行加密,并通过 WS-Trust 响应将同一密钥的副本发送至发出请求的客户机。必须这样做,否则客户机无法读取 SAML 令牌中已加密的密钥。为了证明 SAML 令牌的所有权,客户机使用共享密钥为 SOAP 请求消息签名和加密。需要使用业务服务并通过抽取已加密的共享密钥并将此密钥用来验证数字签名,从而验证 HoK 令牌所有权。

1 用户使用 SPNEGO 登录 Web 浏览器并且已进行认证。已创建 JAAS 主体集。
2 SPNEGO 令牌中的凭证用来请求使用 WS-Trust 的 SAML 令牌。使用信任服务器专用密钥对令牌进行了签名。
3 根据信任关系对 SAML 令牌的签名进行了验证。使用 SAML 令牌中的属性创建了安全凭证。SAML 令牌中的密钥用来对 SOAP 消息解密。
如此图中所示,浏览器客户端使用 Kerberos 凭证(由 SPNEGO 令牌表示)来访问 Web 应用程序。假定可以委派 Kerberos 凭证,那么 Web 应用程序可以代表客户机使用委派的客户机 Kerberos 凭证从 STS 请求 SAML 令牌。例如,Web 应用程序代表客户机从密钥分发中心 (KDC) 获得客户机核准请求 (APREQ) Kerberos 令牌。然后,Web 应用程序代表客户机使用客户机 APREQ 令牌向 STS 进行认证,并从 STS 请求客户机 SAML 令牌。
在此示例中,SAML 令牌需要使用对称密钥的“密钥拥有者”确认方法。Web 应用程序还代表客户机使用 SAML 令牌来访问下游业务服务,因此,SAML 令牌对下游服务认证客户机,并且还使用数字签名和加密来保护请求消息。有关如何为 HoK 令牌设置绑定的更多信息,请阅读有关为 SAML“密钥拥有者”对称密钥令牌配置客户机和提供者绑定的信息。
成功执行此方案之后,如果下游业务服务可以抽取嵌入式密钥,那么目标业务服务可以按照该方案中描述的相同过程使用 SAML 令牌来访问其他下游服务。此外,可以配置业务服务以使用自发放的 SAML 令牌来访问下游服务,以避免分配专用密钥。
方案 3:Web Service 联合身份管理
在联合身份管理使用方案中,浏览器客户端将访问公司门户网站 Web 应用程序。在此方案中,使用基本用户认证数据(例如,用户名和密码)从 STS 请求 SAML 令牌,然后使用 SAML 令牌来获取跨安全域访问业务服务的权限。用于接收的业务服务提供程序将根据该提供者与发放 SAML 令牌的 STS 之间的信任关系来验证 SAML 令牌,并且该提供者还会声明用户的身份和属性。这意味着不需要预先在目标业务服务的用户目录中定义该用户。此方案的优势在于,它提供了一种更容易管理的方式将许多业务合作伙伴的业务服务联合在一起,又不需要将用户合并到一项用户目录服务中。

1 用户使用用户名和密码进行登录,并且已向公司门户网站进行认证。已创建 JAAS 主体集。
2 使用用户名和密码向 STS 进行认证,并请求表示该用户的 SAML 令牌。
3 根据信任关系对 SAML 令牌的签名进行了验证。使用 SAML 令牌中的属性创建了安全凭证。SAML 令牌中的密钥用来对 SOAP 消息解密。
缺省系统登录配置 wss.caller 将由 SAML 令牌表示的用户身份映射至所配置的用户目录中的用户身份。必须将定制登录模块添加至登录配置 wss.caller,以对应用程序服务器声明其他安全域中的 SAML 令牌用户身份。此定制登录模块将抽取 SAML 令牌用户身份和其他属性,并构造应用程序服务器使用的声明属性。应用程序服务器需要“用户名”和“用户身份”这两个属性。因为在身份断言中提供了这两个属性,所以应用程序服务器不需要对本地用户目录验证用户名。
此外,可以向应用程序服务器提供有关用户组成员资格的信息。此信息用来构造表示用户的应用程序服务器安全凭证的 WSCredential 对象。使用 JAAS LoginContext 共享状态将用户属性传递到应用程序服务器 WSWSSLoginModule。有关这些属性的详细信息,请阅读有关配置入站身份映射的信息。
方案 4:定制单点登录 (SSO) 解决方案
定制单点登录 (SSO) 使用方案使用 SAML 令牌库 API、WS-Trust 客户机 API 以及其他应用程序服务器 API 和 SPI 来构建定制 SSO 解决方案以适合于特定业务计算环境。此方案的图显示了一个示例,在此示例中,已对用户进行认证,并且与公司服务器具有信任关系的身份提供程序发放了 SAML 令牌。在此方案中,一个公司想要根据信任关系为用户授予对于受保护的 Web 应用程序的访问权,而不要求用户进行其他认证。
Web 应用程序客户机(例如,Web 浏览器)使用 HTTPS 协议(而不使用 Web Service 协议)将 SAML 令牌传递到应用程序服务器。为了拦截和传递这些请求,该公司将构建一个用于实现应用程序服务器“信任关联拦截器”API 的 SAML 信任关联拦截器 (TAI)。SAML TAI 使用 SAML 令牌库 API 来验证和认证 SAML 令牌。此外,SAML TAI 可以使用 WS-Trust 客户机 API 针对外部 STS 来验证和认证 SAML 令牌。有关 TAI 接口的更多信息,请阅读有关为信任关联开发定制拦截器的信息。WebSphere Application Server 未随附定制 SAML TAI。

1 用户使用用户名和密码登录到身份提供程序。身份提供程序对用户发放 SAML 令牌。
2 SAML TAI 使用 SAMLTokenFactory API 来验证 SAML 令牌,以及对 SAML 令牌进行认证以创建用户凭证。SAML TAI 还可以使用 WS-Trust 客户机 API 针对外部 STS 验证 SAML 令牌。
有关 SAML API 的更多信息,请阅读有关 WS-Trust 客户机 API 和 SAML 令牌库 API 的信息。
更复杂的解决方案:多个安全域
本文档的前面章节描述了四种基本使用方案。但是,您可能想要跨多个安全域边界来声明 SAML 令牌。有关此解决方案的更多信息,请参阅有关跨 WebSphere Application Server 安全域进行 SAML 声明的文档。