- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我尝试从使用 PasswordText WSS 类型的 Web 服务获取信息。首先,我使用 soapUI 对其进行了测试并成功获取了数据。然后我在Java上实现了认证,写了SecurityHandler:
public final class SecurityHandler implements SOAPHandler<SOAPMessageContext> {
...
@Override
public boolean handleMessage(SOAPMessageContext messageContext) {
boolean outInd = (Boolean) messageContext.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (outInd) {
try {
WSSecUsernameToken builder = new WSSecUsernameToken();
builder.setPasswordType(WSConstants.PASSWORD_TEXT);
builder.setUserInfo(_username, _password);
builder.addNonce();
builder.addCreated();
Document doc = messageContext.getMessage().getSOAPPart().getEnvelope().getOwnerDocument();
WSSecHeader secHeader = new WSSecHeader();
secHeader.insertSecurityHeader(doc);
builder.build(doc, secHeader);
} catch (Exception e) {
LOGGER.error("Unable to handle SOAP message", e);
return false;
}
}
return true;
}
...
}
我用 XMLUtils.PrettyDocumentToString(doc)
检查了 doc 对象,发现它看起来像是 soupUI 发送的 XML - 所有身份验证信息(登录名、密码、随机数和创建时间)都已到位, Security
标记的 mustUnderstand 属性为真。
然后我遇到了错误:
javax.xml.ws.soap.SOAPFaultException:MustUnderstand header :[{ http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd }安全性]不理解
我找到了从 Security
标记中删除 mustUnderstand 属性的建议,但没有帮助。你有什么想法吗?
附言
Web 服务端点在 HTTPS 上。
来自 WSDL 的策略部分:
<wsp:Policy wsu:Id="BasicHttpBinding_RelateService_policy">
<wsp:ExactlyOne>
<wsp:All>
<sp:TransportBinding>
<wsp:Policy>
<sp:TransportToken>
<wsp:Policy>
<sp:HttpsToken RequireClientCertificate="false"/>
</wsp:Policy>
</sp:TransportToken>
<sp:AlgorithmSuite>
<wsp:Policy>
<sp:Basic256/>
</wsp:Policy>
</sp:AlgorithmSuite>
<sp:Layout>
<wsp:Policy>
<sp:Lax/>
</wsp:Policy>
</sp:Layout>
<sp:IncludeTimestamp/>
</wsp:Policy>
</sp:TransportBinding>
<sp:SignedSupportingTokens>
<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>
<sp:Wss10>
<wsp:Policy/>
</sp:Wss10>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
soapUI 请求:
<soapenv:Envelope xmlns:ns="http://api.example.com/RelateService/1.0"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<wsse:Security soapenv:mustUnderstand="1"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken wsu:Id="UsernameToken-37"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:Username>username</wsse:Username>
<wsse:Password
Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">
password
</wsse:Password>
<wsse:Nonce
EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">
li/0YK2wxrmrHL7Cg+etdQ==
</wsse:Nonce>
<wsu:Created>2012-02-21T08:59:10.262Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
<soapenv:Body>
<ns:RetrieveCustomerByEmail>
<ns:email>xxx@example.com</ns:email>
<ns:firstName/>
<ns:lastName/>
</ns:RetrieveCustomerByEmail>
</soapenv:Body>
</soapenv:Envelope>
我的要求:
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
S:mustUnderstand="1">
<wsse:UsernameToken wsu:Id="UsernameToken-1">
<wsse:Username>username</wsse:Username>
<wsse:Password
Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">
password
</wsse:Password>
<wsse:Nonce
EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">
+jeleKO9zr0/wLjAIYcmSg==
</wsse:Nonce>
<wsu:Created>2012-02-21T09:42:03.760Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
</S:Header>
<S:Body>
<ns5:RetrieveCustomerByEmail xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays"
xmlns:ns2="http://schemas.datacontract.org/2004/07/XXX.Service"
xmlns:ns3="http://schemas.datacontract.org/2004/07/XXX.Service.Relate.Contract"
xmlns:ns4="http://schemas.datacontract.org/2004/07/XXX.Service.Dto"
xmlns:ns5="http://api.example.com/RelateService/1.0"
xmlns:ns6="http://schemas.microsoft.com/2003/10/Serialization/">
<ns5:email>xxx@example.com</ns5:email>
<ns5:firstName/>
<ns5:lastName/>
</ns5:RetrieveCustomerByEmail>
</S:Body>
</S:Envelope>
最佳答案
当服务不处理 header 时,您可能会遇到此错误。该服务需要实现一个带有 getHeaders() 的 SOAPHandler 来解析 header 。对于上述故障正确的实现方式如下
@Override
public Set<QName> getHeaders() {
QName securityHeader = new QName("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd",
"Security");
HashSet<QName> headers = new HashSet<QName>();
headers.add(securityHeader);
return headers;
}
当服务实际上不安全时,也有可能得到这个,但客户端正在尝试使用安全配置(可能使用 XWSS 安全配置)为此,只需从浏览器检查已发布的 wsdl 并确保它包含预期的安全策略(将 ?wsdl 附加到其端点 URL)
关于java - SOAP 故障异常 "MustUnderstand headers (oasis-200401-wss-wssecurity-secext-1.0.xsd) are not understood",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9364428/
最近几天一直在为这个错误而苦苦挣扎 Authentication of type {http://service.soap.xcompany.com}AuthenticationHeader had
我正在使用 jax-ws 从 JAVA 调用使用 WS-Security 的 SOAP 服务。问题是响应包含一些 MustUnderstand header ,并且我收到 Element notund
我正在使用 .net 中开发的 Web 服务,该服务接受用户名和密码作为 SOAP header 的一部分。我创建了 SOAPHandler 来创建 header 。 我打印了如下消息: x
Web 服务托管在没有 Internet 连接的服务器上 我正在使用 SOAPUI 访问 Web 服务 url 并进行测试 但得到以下错误信息任何帮助真的很感激
我浏览了以下链接:SOAPFaultException "MustUnderstand headers (oasis-200401-wss-wssecurity-secext-1.0.xsd) are
我在向 ocamlmktop 添加库时遇到问题。 我有一个目录 com,其中有一个目标文件 com/com.cma。 如果我运行 ocamlmktop com.cma -o 顶部 在 com 目录中,
我尝试使用 Opam 提供的 Ocaml 版本编译 Ocaml 项目。 我的 ocamlbuild、ocamlfind 和 oasis 看起来没问题: /Users/fred/.opam/4.02.1
我正在使用 oasis 构建我的 ocaml 项目,源代码位于名为 src 的目录中。 oasis 构建文件如下所示: OASISFormat: 0.4 Name: Test Versi
OASIS 是一种用于 VLSI 拓扑表示的格式。我需要一个 OASIS 格式的解析器,或者一些描述这种格式结构的文档。我在 Google 中找不到任何提及。 是否有可用的 OASIS 解析器,或者至
我有this包含多个库的 oasis 文件——如何为每个库启用 -w .. 和 -warn-error +a? 作为引用,给定的 oasis 文件开头如下: OASISFormat: 0.4 Name
假设我有一组模块,每个模块都带有子模块。 M1.X M2.X M3.X M1.Y M2.Y M3.Y M1.Z M2.Z
OASSIS KMIP 规范是否有开源实现或引用实现? https://www.oasis-open.org/standards#kmipspecv1.1 最佳答案 没有引用实现,但我知道有一些开源实
我意识到您可以使用 ocamlbuild xxx.inferred.mli 一个一个地生成推断的 mli 文件,但我希望这可以为我自动完成(也可以查看 ocaml 推断的类型并使用这些 mli 作为我
OWL API 提供了多个 IRI 映射器来在本地缓存本体文档。他们中有人像 Protege 一样使用 Oasis XML Catalogs 吗?更好的是,是否有一种方法可以在本地自动缓存读入的本体,
我是一个新的 OCaml 用户。我问过 a question学习如何建立一个基本的 OCaml 项目,但我仍然有问题。跳到最后一个 TL;DR 例如,我正在尝试学习 Irmin。关于 home pag
我是 Android 开发新手。我需要使用根据 OASIS Web Services Security specification 设计的 .NET Web 服务. 我正在使用 KSOAP2 最新 A
我收到一个 SAML LogoutResponse 我在谷歌中找到了原因: urn:oasis:names:tc:SAML:2.0:status:Requester- means that ADF
目标是通过使用 WCF 连接到需要 UserNameToken ws-security 的 Web 服务,如标准“oasis-200401-wss-soap-message-security-1.0”
我正在向 ADFS 发送 saml 2.0 注销请求并获得状态代码为“urn:oasis:names:tc:SAML:2.0:status:Requester”的注销响应。 我检查了名称 ID 值,它
在 OASIS 规范中,我可以阅读以下有效的 nameid 格式: urn:oasis:names:tc:SAML:2.0:nameid-format:persistent urn:oasis:nam
我是一名优秀的程序员,十分优秀!