Web Service 的 Kerberos 用法概述
您可以使用 Kerberos 令牌来完成当前可能用其他二进制安全性令牌(如轻量级第三方认证 (LTPA) 和“安全对话”令牌)来完成的相似功能。
令牌生成器
从密钥分发中心 (KDC) 创建 Kerberos 令牌后,Web Service 安全性生成器将令牌进行编码,然后插入到 SOAP 消息中,并传播令牌,用于令牌使用或验收。如果要求使用消息完整性或机密性密钥,那么将使用来自 Kerberos 凭单中的 Kerberos 子密钥或 Kerberos 会话密钥。密钥可能导出自 Kerberos 子密钥或 Kerberos 会话密钥。Web Service 安全性使用来自 Kerberos 令牌的密钥以对在“OASIS Web Service 安全性 Kerberos 令牌概要文件 V1.1”规范中描述的消息部分进行签名和加密。所使用的密钥类型由 Web Service 安全性配置或策略进行预先规定。而且,导出密钥的大小可进行配置。
- 当 Kerberos 子密钥出现在鉴别符中时,使用 Kerberos 子密钥
- 如果不存在子密钥,那么直接使用来自凭单中的会话密钥
- 使用从先前所述两种密钥中导出的密钥
- http://www.w3.org/2001/04/xmlenc#aes128-cbc
- http://www.w3.org/2001/04/xmlenc#aes256-cbc
- http://www.w3.org/2001/04/xmlenc#tripledes-cbc
- 此 Application Server 仅支持 Kerberos V5。
- 如果 Kerberos 凭单仅符合 RFC-4120,那么您可以使用 Web Service 安全性中的 AES 类型的对称算法套件。
- 如果 KDC 运行于 Microsoft Windows 2003 服务器,那么将仅使用 RC4-HMAC 128 位的 Kerberos 密钥。
- 如果 KDC 运行于 Microsoft Windows 2008 服务器,那么将使用 AES 128 位或 256 位的 Kerberos 密钥。
- 如果服务提供程序正在某一集群中运行,那么 Kerberos 凭单必须为可前进项,且不能包含地址。
- 如果您使用 AES 256 位加密算法,那么您必须导入不受限制的 Java™ 安全策略。
有关在跨域环境或可信域环境中使用 Kerberos 令牌的信息,请阅读“单个域环境、跨域环境或可信域环境中的 Kerberos 令牌安全性”主题。
令牌使用者
Web Service 安全性使用者接收并提取来自 SOAP 消息的 Kerberos 令牌。然后,使用者通过其自己的密钥验证和接收 Kerberos 令牌。此服务的密钥存储在导出的密钥表文件中。验收后,Web Service 安全性使用者将相关的请求令牌信息存储到上下文“主体集”中。您还可以将相应密钥导出到请求令牌中。该密钥用于验证并解密消息。 如果该请求令牌为可前进项且不能包含地址,那么应用程序服务器可以使用针对下游呼叫的存储令牌。
令牌格式和引用
有关 JAX-WS 应用程序,请使用定制策略的现有定制策略集或管理命令脚本,以指定 Kerberos 令牌类型、消息签名以及消息加密。WebSphere® Application Server 的 JAX-WS 编程模型提供了最低限度的配置,以启用具有 Kerberos 令牌的 Kerberos 令牌概要文件。
有关 JAX-RPC 应用程序,请使用部署描述符指定定制令牌采用的 Kerberos 令牌。您可以将 Kerberos 令牌用于认证,但是您不能将其用于消息签名或消息加密。
- com.ibm.websphere.wssecurity.callbackhandler.KRBTokenConsumeCallbackHandler
此类别是使用者端 Kerberos V5 令牌的回调处理程序。此实例用于生成 WSSVerification 对象和 WSSDecryption 对象,以验证 Kerberos 二进制安全性令牌。
- com.ibm.websphere.wssecurity.callbackhandler.KRBTokenGenerateCallbackHandler
此类别是生成器端 Kerberos V5 令牌的回调处理程序。此实例用于生成 WSSSignature 对象和 WSSEncryption 对象,以生成 Kerberos 二进制安全性令牌。
“OASIS Web Service 安全性 Kerberos 令牌概要文件 V1.1”规范规定了 Kerberos 令牌附属于具有 <wsse:BinarySecurityToken> 元素的 SOAP 消息。以下示例显示了这种消息格式。粗体字类型显示了来自本示例其他部分的二进制安全性令牌信息。
<S11:Envelope xmlns:S11=“…” xmlns:wsu=“…”>
<S11:Header>
<wsse:Security xmlns:wsse=“…”>
<wsse:BinarySecurityToken
EncodingType=“http://docs.oasis-open.org/wss/2004/01/
oasis-200401-wss-soap-message-security-1.0#Base64Binary”
ValueType=“http://docs.oasis-open.org/wss/
oasis-wss-kerberos-token-profile-1.1#Kerberosv5_AP_REQ”
wsu:Id=“MyToken”>boIBxDCCAcCgAwIBBaEDAgEOogcD…
</wsse:BinarySecurityToken>
…
</wsse:Security>
</S11:Header>
<S11:Body>
…
</S11:Body>
</S11:Envelope>
Kerberos 令牌由 <wsse:SecurityTokenReference> 元素所引用。在 <wsse:BinarySecurityToken> 元素内指定的并在下列示例中以粗体字类型显示的 <wsu:Id> 元素直接引用 <wsse:SecurityTokenReference> 元素中的令牌。
<wsse:SecurityTokenReference> 元素内的 @wsse:TokenType 属性值与 <wsse:BinarySecurityToken> 元素中的 ValueType 属性值相匹配。不必提供 Reference/@ValueType 属性。 然而,如果指定属性,那么它的值必须与 @wsse11:TokenType 属性的值等价。
<S11:Envelope xmlns:S11=“…” xmlns:wsu=“…”>
<S11:Header>
<wsse:Security xmlns:wsse=“…”>
<wsse:BinarySecurityToken
EncodingType=“http://docs.oasis-open.org/wss/2004/01/
oasis-200401-wss-soap-message-security-1.0#Base64Binary”
ValueType=“http://docs.oasis-open.org/wss/
oasis-wss-kerberos-token-profile-1.1#Kerberosv5_AP_REQ”
wsu:Id=“MyToken”>boIBxDCCAcCgAwIBBaEDAgEOogcD…
</wsse:BinarySecurityToken>
</wsse:Security>
</S11:Header>
</S11:Envelope>
<wsse:Security>
</wsse:Security>
<wsse:SecurityTokenReference
TokenType=“http://docs.oasis-open.org/wss/
oasis-wss-kerberos-token-profile-1.1#Kerberosv5_AP_REQ”>
<wsse:Reference URI=“#MyToken”
ValueType=“http://docs.oasis-open.org/wss/
oasis-wss-kerberos-token-profile-1.1#Kerberosv5_AP_REQ”>
</wsse:Reference>
</wsse:SecurityTokenReference>
…
<wsse:Security>
</wsse:Security>
<S11:Header>
</S11:Header>
<S11:Body>
…
</S11:Body>
<S11:Envelope>
</S11:Envelope>
<wsse:KeyIdentifier> 元素用于指定 Kerberos 令牌的标识。该标识的值为先前所述消息中编码的 Kerberos 令牌的 SHA1 散列值。该元素必须具有 #Kerberosv5APREQSHA1 值的 ValueType 属性。在接收原始 Kerberos 令牌之后,KeyIdentifier 引用机制用于随后的消息交换。以下示例显示了粗体字类型中的密钥标识信息:
<S11:Envelope xmlns:S11=“…” xmlns:wsse=“…” xmlns:wsu=“…”>
<S11:Header>
<wsse:Security>
…
<wsse:SecurityTokenReference
wsse11:TokenType=http://docs.oasis-open.org/wss/
oasis-wss-kerberos-token-profile-1.1#Kerberosv5_AP_REQ>
<wsse:KeyIdentifier
ValueType=“http://docs.oasis-open.org/wss/
oasis-wss-kerberos-token-profile-1.1#Kerberosv5APREQSHA1”>
GbsDt+WmD9XlnUUWbY/nhBveW8I=
</wsse:KeyIdentifier>
</wsse:SecurityTokenReference>
…
</wsse:Security>
</S11:Header>
<S11:Body>
…
</S11:Body>
</S11:Envelope>
Kerberos 令牌的多重引用
在该服务验证并接收 Kerberos 标识后,客户机不必对每个请求发送 Kerberos 令牌。“OASIS Web Service 安全性 Kerberos 令牌概要文件 V1.1”规范建议您,在接收原始 AP_REQ 包后,对每条后续消息使用 SHA1 编码密钥(其中的 <wsse:SecurityTokenReference> 元素内带有 <wsse:KeyIdentifier> 元素)。然而,Web Service 安全性的运行时环境必须映射密钥标识,以进一步处理高速缓存的 Kerberos 令牌。缺省情况下,IBM® WebSphere Application Server 7.0 和更高版本支持此概要文件中描述的 SHA1 高速缓存。然而,此应用程序服务器还提供了用现有服务 Kerberos 凭单生成适用于每个请求的新的 AP_REQ 令牌。 当您与 Microsoft .NET 进行互操作时,请勿使用 pSHA1 高速缓存生成适用于每个请求的 AP_REQ 包。