7.2. 指定身份验证策略
概述
如果您希望端点支持身份验证,请将 支持令牌策略断言 与相关的端点绑定关联。有几种不同类型的支持令牌策略断言,其元素都具有 *
格式的名称(例如,supportingTokens、SupportingTokens
SignedSupportingTokens
等等)。有关完整列表,请参阅 “SupportingTokens assertions”一节。
将支持令牌断言与端点关联有以下效果:
-
需要来自端点的消息来包括指定的令牌类型(令牌的方向由
sp:IncludeToken
属性指定)。 - 根据您使用的特定类型的支持 token 元素,端点可能需要签名和/或加密令牌。
支持令牌断言意味着运行时会检查这些要求是否得到满足。但是 WS-SecurityPolicy 策略 没有定义 向运行时提供凭证的机制。您必须使用 Blueprint XML 配置来指定凭证(请参阅 第 7.3 节 “提供客户端凭证”)。
语法
*SupportingTokens
元素(即,带有 SupportingTokens
后缀的所有元素都具有以下语法: “SupportingTokens assertions”一节
<sp:SupportingTokensElement xmlns:sp="..." ... > <wsp:Policy xmlns:wsp="..."> [Token Assertion]+ <sp:AlgorithmSuite ... > ... </sp:AlgorithmSuite> ? ( <sp:SignedParts ... > ... </sp:SignedParts> | <sp:SignedElements ... > ... </sp:SignedElements> | <sp:EncryptedParts ... > ... </sp:EncryptedParts> | <sp:EncryptedElements ... > ... </sp:EncryptedElements> | ) * ... </wsp:Policy> ... </sp:SupportingTokensElement>
当 SupportingTokensElement 代表支持令牌元素之一时,如果您只需要在安全标头中包含令牌(或令牌),您可以在策略中包含一个或多个令牌断言 [Token Assertion]
。特别是,这是身份验证所需的所有。
如果令牌是合适的类型(例如,X.509 证书或对称密钥),您也可以在理论上使用它使用 sp:AlgorithmSuite
,sp:SignedParts
, sp:SignedParts , sp:SignedParts ,sp:EncryptedParts
, 和 sp:EncryptedElements
元素签名
或加密当前消息的特定部分。但是,Apache CXF 目前不支持 这个功能。
示例策略示例
例 7.1 “支持令牌策略示例” 显示需要在安全标头中包含 WS-Security UsernameToken 令牌(包含用户名/密码凭证)的策略示例。另外,因为令牌在 sp:SignedSupportingTokens
元素中指定,所以策略需要签名令牌。本例使用传输绑定,因此它是负责签署消息的底层传输。
例如,如果底层传输是 HTTPS,则 SSL/TLS 协议(配置了适当的算法套件)负责签名 整个 消息,包括包含指定令牌的安全标头。这足以满足支持令牌签名的要求。
例 7.1. 支持令牌策略示例
<wsp:Policy wsu:Id="UserNameOverTransport_IPingService_policy"> <wsp:ExactlyOne> <wsp:All> <sp:TransportBinding> ... </sp:TransportBinding> <sp:SignedSupportingTokens xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"> <wsp:Policy> <sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient"> <wsp:Policy> <sp:WssUsernameToken10/> </wsp:Policy> </sp:UsernameToken> </wsp:Policy> </sp:SignedSupportingTokens> ... </wsp:All> </wsp:ExactlyOne> </wsp:Policy>
存在 sp:WssUsernameToken10
子元素,表示 UsernameToken 标头应该符合 WS-Security UsernameToken 规范的版本 1.0。
令牌类型
在原则上,您可以在支持令牌断言中指定任何 WS-SecurityPolicy 令牌类型。但是,对于 SOAP 级别身份验证,只有 sp:UsernameToken
令牌类型是相关的。
sp:UsernameToken
在支持令牌断言的上下文中,此元素指定 WS-Security UsernameToken 将包含在安全 SOAP 标头中。本质上,WS-Security UsernameToken 用于在 WS-Security SOAP 标头中发送用户名/密码凭据。sp:UsernameToken
元素具有以下语法:
<sp:UsernameToken sp:IncludeToken="xs:anyURI"? xmlns:sp="..." ... > ( <sp:Issuer>wsa:EndpointReferenceType</sp:Issuer> | <sp:IssuerName>xs:anyURI</sp:IssuerName> ) ? <wst:Claims Dialect="..."> ... </wst:Claims> ? <wsp:Policy xmlns:wsp="..."> ( <sp:NoPassword ... /> | <sp:HashPassword ... /> ) ? ( <sp:RequireDerivedKeys /> | <sp:RequireImpliedDerivedKeys ... /> | <sp:RequireExplicitDerivedKeys ... /> ) ? ( <sp:WssUsernameToken10 ... /> | <sp:WssUsernameToken11 ... /> ) ? ... </wsp:Policy> ... </sp:UsernameToken>
sp:UsernameToken
的子元素都是可选的,对于普通身份验证不需要。通常,与此语法的唯一部分是 sp:IncludeToken
属性。
目前,在 sp:UsernameToken
语法中,Apache CXF 仅支持 sp:WssUsernameToken10
子元素。
sp:IncludeToken attribute
sp:IncludeToken
的值必须与来自保护策略的 WS-SecurityPolicy 版本匹配。当前版本是 1.2,但旧版 WSDL 可能会使用版本 1.1。sp:IncludeToken
属性的有效值如下:
- Never
令牌 MUST 不包含在启动器和接收者之间发送的任何消息中,而应使用对令牌的外部引用。有效的 URI 值是:
1.2
http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never
1.1
http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never
- once
令牌必须仅包含在从启动器发送到接收方的消息中。对令牌 MAY 的引用使用内部参考机制。在接收者和启动器之间发送的后续相关消息可能会使用外部引用机制来引用令牌。有效的 URI 值是:
1.2
http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Once
1.1
http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Once
- AlwaysToRecipient
令牌必须包含在从启动器发送到接收方的所有消息中。令牌 MUST 不包含在从接收者发送到启动器的消息中。有效的 URI 值是:
1.2
http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient
1.1
http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient
- AlwaysToInitiator
令牌必须包含在从接收者发送到启动器的所有消息中。令牌 MUST 不包含在从启动器发送到收件人的消息中。有效的 URI 值是:
1.2
http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToInitiator
1.1
http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToInitiator
- Always
令牌必须包含在启动器和接收者之间发送的所有消息中。这是默认的行为。有效的 URI 值是:
1.2
http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Always
1.1
http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Always
SupportingTokens assertions
支持以下支持令牌断言类型:
sp:SupportingTokens
此元素要求指定类型的令牌(或令牌)包含在 wsse:Security
标头中。不强制要求。
此策略不明确要求签名或加密令牌。但是,通常要通过签名和加密来保护令牌。
sp:SignedSupportingTokens
此元素要求指定类型的令牌(或令牌)包含在 wsse:Security
标头中。另外,此策略需要签名令牌来保证令牌的完整性。
此策略不明确要求加密令牌。但是,通常要通过签名和加密来保护令牌。
sp:EncryptedSupportingTokens
此元素要求指定类型的令牌(或令牌)包含在 wsse:Security
标头中。此外,此策略要求令牌加密,以便保证令牌保密性。
此策略不明确要求签名令牌。但是,通常要通过签名和加密来保护令牌。
sp:SignedEncryptedSupportingTokens
此元素要求指定类型的令牌(或令牌)包含在 wsse:Security
标头中。此外,此策略要求令牌签名和加密,以确保令牌的完整性和机密。
sp:EndorsingSupportingTokens
支持令牌的结束用于为消息签名(主签名)签名。这个签名被称为 结束签名 或次要签名。因此,通过应用支持令牌策略,您可以有一个签名链:主签名(为消息本身签名)和次签名(为主签名签名)。
如果您使用传输绑定(例如 HTTPS),则消息签名实际上不是 SOAP 消息的一部分,因此在这种情况下无法签署消息签名。如果您使用传输绑定指定此策略,则最终令牌会为时间戳签名。
此策略不明确要求签名或加密令牌。但是,通常要通过签名和加密来保护令牌。
sp:SignedEndorsingSupportingTokens
此策略与支持令牌策略的说明相同,但需要签名令牌才能保证令牌的完整性。
此策略不明确要求加密令牌。但是,通常要通过签名和加密来保护令牌。
sp:EndorsingEncryptedSupportingTokens
此策略与支持令牌策略的说明相同,但需要加密令牌来保证令牌保密性。
此策略不明确要求签名令牌。但是,通常要通过签名和加密来保护令牌。
sp:SignedEndorsingEncryptedSupportingTokens
此策略与支持令牌策略的说明相同,但需要签名和加密令牌来保证令牌的完整性和保密性。