- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使 CXF STS 与 509v3 token 一起使用。如果只配置了用户名 token ,它可以正常工作,但在 X509 上会失败。
我在 JBOSS EAP 6.3.1 中使用 CXF
Maven 依赖项
<dependency>
<groupId>org.apache.cxf.services.sts</groupId>
<artifactId>cxf-services-sts-core</artifactId>
<version>2.7.11.redhat-3</version>
</dependency>
<dependency>
<groupId>org.jboss.ws.cxf</groupId>
<artifactId>jbossws-cxf-server</artifactId>
<version>4.3.0.Final-redhat-3</version>
<scope>provided</scope>
</dependency>
我的 WSDL:
...
<wsp:Policy wsu:Id="UT_policy">
<wsp:ExactlyOne>
<wsp:All>
<!--
Disabled for testing - I use SoapUI for sending the request
<sp:TransportBinding>
<wsp:Policy>
<sp:TransportToken>
<wsp:Policy>
<sp:HttpsToken RequireClientCertificate="false"/>
</wsp:Policy>
</sp:TransportToken>
</wsp:Policy>
</sp:TransportBinding>
-->
<sp:SupportingTokens>
<wsp:Policy>
<wsp:ExactlyOne>
<wsp:All>
<sp:X509Token IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp:WssX509V3Token10 wsu:Id="token"/>
</wsp:Policy>
</sp:X509Token>
</wsp:All>
<!--
Disabled for Testing. If I activate both, neither work. Somehow CXF ignores the ExactlyOne Element.
<wsp:All>
<sp:UsernameToken wsu:Id="BiPROBasicToken"/>
</wsp:All>-->
</wsp:ExactlyOne>
</wsp:Policy>
</sp:SupportingTokens>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
示例请求:
<SOAPENV:Envelope xmlns:SOAPENV='http://schemas.xmlsoap.org/soap/envelope/'>
<SOAPENV: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'>
<wsse:BinarySecurityToken EncodingType='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary' ValueType='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3' wsu:Id='Token'>
MIIDMTCCApqgAwI....3aairt
93OqNtk=
</wsse:BinarySecurityToken>
<Signature xmlns='http://www.w3.org/2000/09/xmldsig#'>
<SignedInfo>
<CanonicalizationMethod Algorithm='http://www.w3.org/TR/2001/REC-xml-c14n-20010315'/>
<SignatureMethod Algorithm='http://www.w3.org/2000/09/xmldsig#rsa-sha1'/>
<Reference URI='#body'>
<Transforms>
<Transform Algorithm='http://www.w3.org/2000/09/xmldsig#enveloped-signature'/>
</Transforms>
<DigestMethod Algorithm='http://www.w3.org/2000/09/xmldsig#sha1'/>
<DigestValue>WbLbIc...k=</DigestValue>
</Reference>
<Reference URI='#Timestamp'>
<Transforms>
<Transform Algorithm='http://www.w3.org/2000/09/xmldsig#enveloped-signature'/>
</Transforms>
<DigestMethod Algorithm='http://www.w3.org/2000/09/xmldsig#sha1'/>
<DigestValue>z3q....9w=</DigestValue>
</Reference>
<Reference URI='#Token'>
<Transforms>
<Transform Algorithm='http://www.w3.org/2000/09/xmldsig#enveloped-signature'/>
</Transforms>
<DigestMethod Algorithm='http://www.w3.org/2000/09/xmldsig#sha1'/>
<DigestValue>ypE6U....slo=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>lW1....Tc=</SignatureValue>
<KeyInfo>
<wsse:SecurityTokenReference>
<wsse:Reference URI='#Token' ValueType='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3'/>
</wsse:SecurityTokenReference>
</KeyInfo>
</Signature>
<wsu:Timestamp wsu:Id='Timestamp'>
<wsu:Created>2015-02-09T13:03:11Z</wsu:Created>
<wsu:Expires>2015-02-09T13:13:13Z</wsu:Expires>
</wsu:Timestamp>
</wsse:Security>
</SOAPENV:Header>
<SOAPENV:Body wsu:Id='body' xmlns:wsu='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd'>
<wst:RequestSecurityToken xmlns:wst='http://schemas.xmlsoap.org/ws/2005/02/trust'>
<wst:TokenType>http://schemas.xmlsoap.org/ws/2005/02/sc/sct</wst:TokenType>
<wst:RequestType>http://docs.oasis-open.org/ws-sx/ws-trust/200512/Issue</wst:RequestType>
</wst:RequestSecurityToken>
</SOAPENV:Body>
</SOAPENV:Envelope>
请求有效且无法更改 -> 它是由另一个程序生成的。
回应:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>These policy alternatives can not be satisfied:
{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}SupportingTokens
{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}X509Token</faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>
我不知道我的策略定义是否错误,或者我的 sts 类是否错误。
STS类
package net.example;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import javax.xml.transform.Source;
import javax.xml.ws.WebServiceProvider;
import net.example.STSCallbackHandler;
import org.apache.cxf.annotations.EndpointProperties;
import org.apache.cxf.annotations.EndpointProperty;
import org.apache.cxf.sts.StaticSTSProperties;
import org.apache.cxf.sts.operation.TokenIssueOperation;
import org.apache.cxf.sts.operation.TokenValidateOperation;
import org.apache.cxf.sts.service.ServiceMBean;
import org.apache.cxf.sts.service.StaticService;
import org.apache.cxf.sts.token.provider.SCTProvider;
import org.apache.cxf.sts.token.validator.SCTValidator;
import org.apache.cxf.sts.token.validator.X509TokenValidator;
import org.apache.cxf.ws.security.sts.provider.SecurityTokenServiceProvider;
import org.apache.cxf.ws.security.tokenstore.MemoryTokenStore;
@WebServiceProvider(serviceName = "SecurityTokenService",
portName = "UT_Port",
targetNamespace = "http://docs.oasis-open.org/ws-sx/ws-trust/200512/",
wsdlLocation = "WEB-INF/wsdl/ws-trust-1.4-service.wsdl")
@EndpointProperties(value = {
@EndpointProperty(key = "ws-security.signature.username", value = "mystskey"),
@EndpointProperty(key = "ws-security.encryption.username", value = "mystskey"),
@EndpointProperty(key = "ws-security.signature.properties", value = "stsKeystore.properties"),
@EndpointProperty(key = "ws-security.callback-handler", value = "net.example.STSCallbackHandler")
})
public class SampleSTS extends SecurityTokenServiceProvider {
@Override
public Source invoke(Source request) {
return super.invoke(request); //To change body of generated methods, choose Tools | Templates.
}
public SampleSTS() throws Exception {
super();
final StaticSTSProperties props = new StaticSTSProperties();
props.setCallbackHandlerClass(STSCallbackHandler.class.getName());
//X509?
props.setSignaturePropertiesFile("stsKeystore.properties");
props.setSignatureUsername("mystskey");
//????
props.setIssuer("mystskey");
final List<ServiceMBean> services = new LinkedList<ServiceMBean>();
StaticService service = new StaticService();
service.setEndpoints(Arrays.asList(
"http://\\[0:0:0:0:0:0:0:1\\]:(\\d)*/sts4/SecurityService"
));
services.add(service);
final TokenIssueOperation issueOperation = new TokenIssueOperation();
issueOperation.setServices(services);
issueOperation.getTokenProviders().add(new SCTProvider());
issueOperation.setStsProperties(props);
issueOperation.setTokenStore(new MemoryTokenStore());
final TokenValidateOperation validateOperation = new TokenValidateOperation();
validateOperation.getTokenValidators().add(new SCTValidator());
validateOperation.getTokenValidators().add(new X509TokenValidator());
validateOperation.setStsProperties(props);
this.setIssueOperation(issueOperation);
this.setValidateOperation(validateOperation);
}
}
最佳答案
CXF 不支持没有安全绑定(bind)的 X.509 SupportingToken 概念。当您使用非对称签名时,您应该改用 AsymmetryBinding 安全策略,并使用 SignedParts 策略来覆盖应签名的消息部分。
关于java - 如何使用CXF STS和X509v3 BinarySecurityToken,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28670807/
我正在尝试获取 BinarySecurityToken登录以查看其 ID 和摘要。我按照说明操作 here但输出仍然是 使用 .NET 3.5我怎样才能得到这个记录?我不想使用像 Wiresha
我正在尝试使 CXF STS 与 509v3 token 一起使用。如果只配置了用户名 token ,它可以正常工作,但在 X509 上会失败。 我在 JBOSS EAP 6.3.1 中使用 CXF
我已成功测试使用 SoapUI (5.1.2) 连接到 SOAP 服务,现在我需要从 C# 应用程序生成 soap 请求。 我向 SoapUI 添加了一个 keystore ,其中存储了证书,并且 S
我正在创建一个客户端,该客户端正在使用客户提供给我的 Web 服务。现在,我确实知道请求正确通过了,因为 Fiddler 向我显示了预期的响应。但是,当此响应到达 Visual Studio 时,无法
我正在尝试在桌面应用程序中使用 C# 使用 Java Web 服务。 My first attempt正在使用 WebServicesClientProtocol,但我无法添加 WSSE Userna
我收到来自客户端的请求,经过一些数据屏蔽后,我将请求转发给 Web 服务。为了让 web 服务授权我,我必须发送 元素。我有一个 .pfx 证书文件,我需要从该证书生成安全 token 。请求的剩余
我正在尝试使用 python 用证书签署 SOAP 请求。我已经尝试过 python-zeep 及其 Signature 方法和 py-wsse 的泡沫。两者都没有给我预期的结果。 Zeep 给了我:
我正在尝试从 C# 客户端使用 Java Web 服务。该服务需要值类型为 X509PKIPathv1 的 BinarySecurityToken 元素。 MIIH...... 自 W
我一直在为这个问题绞尽脑汁,但就是无法让它发挥作用。我有一个我调用的 Web 服务,它生成一个安全 token ,然后需要将其传递给 SOAP header 内的后续服务调用。我让那部分工作得很好,但
我正在使用 customBinding 端点构建 WCF Web 服务,并且在接受另一方发送给我的 WS-Security header 时遇到问题。我们都遵循英国国家卫生服务局制定的规范,因此我无法
我不是 WCF 专家,我只知道服务安全的基础知识,所以我要指出的大部分内容可能都是错误的。也就是说,我需要调用一个 3d 方服务,该服务需要 SOAP header 的特定格式。他们要求 soap h
我正在使用 WSDL,我需要在发出 SOAP 请求时使用我的客户端证书签署时间戳和 SOAP 主体。 我的签名证书必须在消息中表示为 BinarySecurityToken,并像这样包含在 SOAP
我们可以通过添加 key 存储、传出 WS-安全配置(时间戳、用户名和签名)以及用户 token 、时间戳主体的命名空间来从 SOAP UI 工具调用 Web 服务,然后应用传出 wss -> 应用“
我是一名优秀的程序员,十分优秀!