我不确定我是否对wssecurity有正确的理解,所以请按照我需要做的事情的顺序纠正我,我将尝试解释我的问题。
我试图从启用策略的wsdl实现jaxws客户端,策略如下:
<wsp:Policy wsu:Id="AsymmetricX509TokensWithUntPolicy">
<wsp:ExactlyOne>
<wsp:All>
<sp:SupportingTokens xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
<wsp:Policy>
<sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp:WssUsernameToken10/>
</wsp:Policy>
</sp:UsernameToken>
</wsp:Policy>
</sp:SupportingTokens>
<sp:AsymmetricBinding>
<wsp:Policy>
<sp:InitiatorToken>
<wsp:Policy>
<sp:X509Token sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp:WssX509V3Token10/>
</wsp:Policy>
</sp:X509Token>
</wsp:Policy>
</sp:InitiatorToken>
<sp:AlgorithmSuite>
<wsp:Policy>
<sp:Basic128/>
</wsp:Policy>
</sp:AlgorithmSuite>
<sp:Layout>
<wsp:Policy>
<sp:Lax/>
</wsp:Policy>
</sp:Layout>
<sp:IncludeTimestamp/>
<sp:ProtectTokens/>
<sp:OnlySignEntireHeadersAndBody/>
</wsp:Policy>
</sp:AsymmetricBinding>
<sp:SignedParts>
<sp:Body/>
<sp:Header Name="Timestamp" Namespace="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"/>
</sp:SignedParts>
<sp:Wss11>
<wsp:Policy>
<sp:MustSupportRefKeyIdentifier/>
</wsp:Policy>
</sp:Wss11>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
我成功地创建了一个独立的cxf客户端,与安全的Web服务通信,主要是因为cxf框架中存在这些依赖关系
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-ws-security</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-ws-policy</artifactId>
<version>3.2.1</version>
</dependency>
它们具有自动提供标题的特性,并且在幕后做了很多我不理解的事情,但它是有效的。我的客户端设置为simpel:
Map ctx = ((BindingProvider) webServicePortType).getRequestContext();
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Properties props = new Properties();
try (InputStream resourceStream = loader.getResourceAsStream(signaturePropertyFilePath)) {
props.load(resourceStream);
} catch (IOException e) {
throw new RuntimeException(
"IOException: Unresolvable signature property filepath: " + signaturePropertyFilePath, e);
}
props.forEach((k, v) -> {
ctx.put(k.toString(), v);
});
ctx.put(SecurityConstants.CALLBACK_HANDLER, callBackHandler);
ctx.put(SecurityConstants.SIGNATURE_PROPERTIES, signaturePropertyFilePath);
现在我的问题是,我已经看到它工作了,所以我很高兴地将我的客户端移动到运行在weblogic 12c上的网络应用html" target="_blank">程序,但是现在事情出了问题。cxf-rt-ws-策略的良好的自动特性现在消失了,我得到了没有头的肥皂请求,这会导致错误:
These policy alternatives can not be satisfied:
{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}UsernameToken:收到的令牌与令牌包含要求不匹配{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}AsymmetricBinding:收到的时间戳与要求不匹配{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}发起者托肯{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}X509Token:收到的令牌与令牌包含要求不匹配{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}包含时间戳{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}保护代币{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}仅限SignEntireHeaders和Body{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}签名部分:{http://www.w3.org/2003/05/soap-envelope}未签名的机构
没有标题的结果。
幸运的是,在weblogic上运行cxf客户端通常没有任何问题,只要webservices没有安全要求。在我的独立工作客户端中没有spring或Spring Boot,也许cxf本身调用了spring,但我没有帮助。
在weblogic上运行时,来自cxf框架的“PolicyInterceptorProviderRegistryImpl”停止工作。我怀疑这与cxf总线扩展有关。在容器中运行时,txt的工作方式不同。抱歉,weblogic上的webapplication中没有Spring。但我的单机版在没有Spring的情况下运行良好。cxf框架上的任何人请帮助!:)
那么为什么它是独立工作的,而不是在容器中运行时。有人能帮忙吗?
提前感谢:)
我设法找到了另一个解决办法。在我的单机版上运行的ws-security头的良好自动注入行为从未在weblogic 12上运行过。相反,我必须手动配置它,让weblogic使用不同的JAXBContextFactory实现,而不是它自己的moxy impl。尽管cxf声称与moxy兼容,但与moxy存在问题。
>
创建签名属性文件:
security.username=151413
security.password=NA
security.signature.username=sisprivatekey
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
org.apache.ws.security.crypto.merlin.keystore.type=jks
org.apache.ws.security.crypto.merlin.keystore.password=changeit
org.apache.ws.security.crypto.merlin.keystore.private.password=changeit
org.apache.ws.security.crypto.merlin.keystore.file=KeyStore.jks
创建回调处理程序
CallbackHandler cpc = new CallbackHandler() {
@Override
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
for (int i = 0; i < callbacks.length; i++) {
WSPasswordCallback pc = (WSPasswordCallback) callbacks[i];
if (pc.getUsage() == WSPasswordCallback.SIGNATURE
|| pc.getUsage() == WSPasswordCallback.DECRYPT) {
pc.setPassword("changeit");
} else {
pc.setPassword("NA");
}
}
}
};
手动设置wss4j/ws-安全:
Client client = ClientProxy.getClient(webServicePortType);
Map<String, Object> outProps = new HashMap<String, Object>();
outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN + " "
+ WSHandlerConstants.TIMESTAMP + " " + WSHandlerConstants.SIGNATURE);
outProps.put(WSHandlerConstants.USER, user);
outProps.put(WSHandlerConstants.PW_CALLBACK_REF, callBackHandler);
outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
outProps.put(WSHandlerConstants.SIG_PROP_FILE, signaturePropertyFilePath);
outProps.put(WSHandlerConstants.SIG_KEY_ID, "DirectReference");
outProps.put(WSHandlerConstants.SIGNATURE_PARTS,
"{Element}{http://schemas.xmlsoap.org/soap/envelope/}Body;{Element}{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd}Timestamp");
client.getOutInterceptors().add(new WSS4JStaxOutInterceptor(outProps));
成交。
我想知道如何在WebSphere Liberty中启用WS-Security 我在Liberty个人资料的server.xml中创建了一个用户(soa_user)和用户组(soa_group)。下面提到的所有功能都已成功安装。 server.xml 我有两个模块,一个用于生成EAR(ABCServiceEAR)文件,另一个是SOAPService(ABCSOAPService) 在src \ ma
问题内容: 如何在Apache-CXF上为Apache JAX-WS启用Spring Security?Web上的示例包括Jax-RS示例,但我不使用Jax- RS。我不想使用cxf的安全性。如何在我的代码中实现它? 问题答案: 两种可能的方式: 将BasicAuthenticationFilter或DigestAuthenticationFilter放在CXF Servlet的前面。 将WS-S
问题内容: 我已经阅读了各种教程和论坛,但是还没有找到结合使用Spring安全性和struts2来研究编码的有效示例。当前的大多数示例都在XML文件中使用预定义的用户名和密码,但未连接到数据库。 如果您知道任何示例或教程,请告诉我。 问题答案: 您可能应该从以下教程开始: Spring Security第1部分–具有数据库的简单登录应用程序 Spring Security第2部分–密码加密,自定义
我正在使用下面的命令检查12C中Weblogic服务器的状态,该命令在10.x Weblogic中正常工作 java weblogic.admin-URL t3:/$IP:$端口getstate-username$username-password$password 我将类路径设置如下导出classpath=$WL_HOME/server/lib/weblogic.jar
我希望能够在cxf中每次发送soap消息时动态更改/设置ws-security信息。如何才能最好地做到这一点。 详细信息:我想更改密钥库名称、密钥库别名、密码、主机名等设置。。在运行时,最好是每次发送消息。目前我正在使用:jaxws-client和WSS4JOutInterceptor以及wss4jinterceptor进行签名。我正在使用http导管和tls客户端参数进行SSL/tls通信。ja
问题内容: 我在站点的文档上有一些ajax调用,这些调用根据ajax状态显示或隐藏进度条 我想基本上在网站的其他部分覆盖这些方法,这些地方会进行许多快速的小型ajax调用,并且不需要弹出和弹出进度条。我试图将它们附加到其他$ .getJSON和$ .ajax调用中或将其插入。我已经尝试过将它们链接起来,但是显然那不好。 问题答案: 2018注意: 此答案已过时; 您可以随时对这个答案进行修改,以解