7.2. 指定身份验证策略
概述
如果您希望端点支持身份验证,请将 支持令牌策略与相关 的端点绑定相关联。支持令牌策略断言有几种不同类型的支持令牌策略,其中的元素的名称为 *SupportingTokens
(如 SupportingTokens
、SignedSupportingTokens
等)。有关完整列表,请参阅 “SupportingTokens assertions”一节。
将支持的令牌断言与端点关联有以下影响:
-
需要端点的消息包括指定的令牌类型(其中令牌方向由
sp:IncludeToken
属性指定)。 - 根据您使用的支持令牌元素的特定类型的,端点可能需要签名和/或加密令牌。
支持的令牌断言表示运行时会检查这些要求是否已被验证。但是 WS-SecurityPolicy 策略 不会 定义为运行时提供凭据的机制。您必须使用 Blueprint XML 配置来指定凭证(请参阅 第 7.3 节 “提供客户端凭证”)。
语法
*
元素(即,支持Tokens 后缀的所有元素)都使用以下语法: “SupportingTokens assertions”一节
SupportingTokens
<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 代表一个支持令牌元素,则 *支持Tokens
.Typly .Typly 需要在安全标头中包含令牌(或令牌),您可以在策略中包含一个或多个令牌断言,[Token Assertion]
。特别是,这是身份验证需要的所有。
如果令牌是适当类型(例如,X.509 证书或对称密钥),您可以理论上使用它使用它为其使用 sp:AlgorithmSuite
、sp:SignedParts
、sp:SignedPartments、sp:Signed
Partments
、sp 和加密
当前消息的特定部分。但是,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
在支持令牌断言的情况下,此元素指定在安全 SOAP 标头中包含 WS-Security UsernameToken。本质上讲,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
令牌 MUST 仅包含在从启动器发送到接收者的一个消息中。引用令牌 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 包含在从启动器发送到接收者的所有消息中。令牌 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 包含在从接收者发送到启动器的所有消息中。令牌 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
令牌 MUST 包含在发起方和接收方之间的所有消息中。这是默认的行为。有效 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
这个策略与支持令牌策略的声明相同,除了令牌需要签名和加密才能保证令牌的完整性和保密性。