用户名令牌
您可以使用 <UsernameToken> 元素传播用户名,并且可以选择传播密码信息。还可以使用此令牌类型来传递基本认证信息。用户名和密码都用于认证 SOAP 消息。
OASIS:Web Service 安全性 UsernameToken 概要文件 1.0
在身份断言中使用包含用户名的 UsernameToken 元素。身份断言根据信任关系来建立用户的标识。
以下示例显示了 <UsernameToken> 元素的语法:
<wsse:UsernameToken wsu:Id="Example-1">
<wsse:Username>
...
</wsse:Username>
<wsse:Password Type="...">
...
</wsse:Password>
<wsse:Nonce EncodingType="...">
...
</wsse:Nonce>
<wsu:Created>
...
</wsu:Created>
</wsse:UsernameToken>
Web Services 安全规范定义下列密码类型:
- http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText(缺省值)
- 此类型是用户名的实际密码。
- http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest
- 此类型是用户名的密码的摘要。值是 UTF8 编码的密码的基本 64 位编码 SHA1 散列值。
WebSphere® Application Server 支持缺省 PasswordText 类型。但它不支持密码摘要,这是因为大多数用户注册表安全策略不对应用软件列出密码。
<S:Envelope
xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<S:Header>
...
<wsse:Security>
<wsse:UsernameToken>
<wsse:Username>Joe</wsse:Username>
<wsse:Password>ILoveJava</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</S:Header>
</S:Envelope>
OASIS: Web Services Security UsernameToken Profile 1.1
WebSphere Application Server 支持用户名令牌概要文件 1.0 和版本 1.1 标准。
WebSphere Application Server 不支持下列操作:
- 在用户名令牌概要文件规范的两个版本中,都不支持摘要密码类型
- 在用户名令牌概要文件规范的两个版本中,都不支持基于密码派生密钥
可通过使用管理控制台使用策略集来配置用户名令牌。另外,可以使用 Web Service 安全性 API 来将用户名令牌附加至 SOAP 消息。下图描述了用于 JAX-RPC 和 JAX-WS 编程模型的用户名令牌的创建和验证。
使用 JAX-RPC 中的 JAAS Login Module 和 JAAS CallbackHandler 创建和验证用户名令牌

使用 JAX-WS 中的 JAAS Login Module 和 JAAS CallbackHandler 创建和验证用户名令牌

在生成器端,用户名令牌通过使用 JAAS LoginModule 创建,并使用 JAAS CallbackHandler 来传递认证数据。JAAS LoginModule 将创建 UsernameToken 对象并将其传递至 Web Service 安全性运行时。
在使用者端,将用户名令牌 XML 格式传递至 JAAS LoginModule 以进行验证或认证,然后使用 JAAS CallbackHandler 将认证数据从 Web Service 安全性运行时传递至 JAAS LoginModule。对令牌进行认证后,将创建 UsernameToken 对象并将其传递至 Web Service 安全性运行时。
以下示例提供了用于创建用户名令牌的样本代码:
WSSFactory factory = WSSFactory.getInstance();
WSSGenerationContext gencont = factory.newWSSGenerationContext();
// Attach the username token to the message.
UNTGenerationCallbackHandler ugCallbackHandler =
newUNTGenerationCallbackHandler("alice", "ecila");
SecurityToken ut = factory.newSecurityToken(ugCallbackHandler,
UsernameToken.class);
gencont.add(ut);
// Generate the WS-Security header
gencont.process(msgctx);