Java Web 服务: Axis2 WS-Security基础
时间:2011-10-02 ibm Dennis Sosnoski
简介:了解如何将 Rampart 安全模块添加到 Apache Axis2 并开始在 Web 服务中使用 WS-Security 特性。
安全性对于众多企业服务来说都是一个重要需求。并且,尝试实现自己的安全性也颇具风险,因为任 何微小的疏忽都会导致严重的安全漏洞。这些特征引起了人们对安全处理标准化的兴趣,许多专家为标准 作出贡献并避免出现任何个人的疏漏。基于 SOAP 的 Web 服务可以使用广泛支持的 WS-Security 和相关 标准来满足它们的安全需求,允许针对每种服务相应地配置安全性。
Apache Axis2 通过 Rampart 模块支持这些安全标准(见 参考资料)。在本文中,您将看到如何为 Axis2 安装、配置和使用 Rampart 以实现基本的安全功能,即在一个服务请求中发送用户名和密码。在 本系列的后续文章中,您将理解如何使用 Rampart 实现更加复杂的安全性。
WS-Security
WS-Security 是向 SOAP Web 服务消息交换添加安全性的一种标准(见 参考资料)。它使用一个 SOAP 消息头部元素将安全信息附加到消息中,使用令牌(token)的形式传递不同类型的声明(包括名称 、身份、密匙、组、特权、功能等等)以及加密和数字签名信息。WS-Security 支持多种形式的令牌、多 个可信任域、多种签名格式和多种加密技术,因此大多数情况下头部信息需要针对每种内容包含特定的格 式和算法识别。附加的信息会导致头部信息产生复杂的结构,如 清单 1 所示(进行了大量编辑)— 包 含签名和加密的样例消息:
清单 1. 包含签名和加密的样例消息
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" ...>
<soap:Header>
<wsse:Security soap:mustUnderstand="1">
<wsu:Timestamp wsu:Id="Timestamp-d2e3c4aa-da82-4138-973d-66b596d66b2f">
<wsu:Created>2006- 07-11T21:59:32Z</wsu:Created>
<wsu:Expires>2006-07- 12T06:19:32Z</wsu:Expires>
</wsu:Timestamp>
<wsse:BinarySecurityToken ValueType="...-x509-token-profile-1.0#X509v3"
EncodingType="...-wss-soap-message-security-1.0#Base64Binary"
xmlns:wsu="...oasis- 200401-wss-wssecurity-utility-1.0.xsd"
wsu:Id="SecurityToken- faa295...">MIIEC56MQswCQY...</wsse:BinarySecurityToken>
<xenc:EncryptedKey xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<wsse:SecurityTokenReference>
<wsse:KeyIdentifier ValueType=
"...#X509SubjectKeyIdentifier">LlYsHyhNnOVA9Aj7...</wsse:KeyIdentifier>
</wsse:SecurityTokenReference>
</KeyInfo>
<xenc:CipherData>
<xenc:CipherValue>g+A2WJhsoGBKUydZ9Za...</xenc:CipherValue>
</xenc:CipherData>
<xenc:ReferenceList>
<xenc:DataReference URI="#EncryptedContent-ba0556c3-d443-4f34-bcd1-14cbc32cd689" />
</xenc:ReferenceList>
</xenc:EncryptedKey>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#&qu
|