我无法从安全令牌服务请求声明。
我的设置如下:
我必须调用一个ADFS(在提供wsdl的生产中)获得一个声明,我可以用它来调用另一个服务,该服务为我提供了一个从提供者请求信息的密钥。但是在测试环境中,我获得了一个类似于ADFS的STS服务,但它没有提供wsdl,它很简单没有wsdl我被告知。因此,我给出的唯一信息是,我必须以kerberos
,ntlm
或username
方式呼叫STS。所以我的问题是,当我没有wsdl时如何做到这一点?
我获得了一个调用的网址,例如https://server:port/ActiveSts/ntlm
或https://server:port/ActiveSts/username
这些是我可以在请求令牌之间选择的选项。我尝试过这样的事情:
SpringBusFactory springBusFactory = new SpringBusFactory();
Bus bus = springBusFactory.createBus();
STSClient stsClient = new STSClient(bus);
stsClient.setLocation("https://server:port/ActiveSts/username");
stsClient.setSoap12();
stsClient.setKeyType(STSConstants.BEARER_KEY_KEYTYPE);
bus.setProperty(SecurityConstants.STS_CLIENT, stsClient);
//bus.setProperty(SecurityConstants.STS_APPLIES_TO, "https://server:port/ActiveSts/username");
bus.setProperty(SecurityConstants.USERNAME, "username");
bus.setProperty(SecurityConstants.PASSWORD, "password");
SecurityToken securityToken = stsClient.requestSecurityToken();
System.out.println(securityToken.toString());
但它不起作用,我在搜索网页时发现的所有相关内容都包含wsdl
。
修改-1: 我们现在遇到的错误:
线程“main”中的异常org.apache.cxf.binding.soap.SoapFault:The 由于内部错误,服务器无法处理请求。 有关错误的更多信息,请打开 IncludeExceptionDetailInFaults(来自ServiceBehaviorAttribute 或者来自服务器上的配置行为) 命令将异常信息发送回客户端,或打开 根据Microsoft .NET Framework SDK文档进行跟踪 检查服务器跟踪日志。在 org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.unmarshalFault(Soap11FaultInInterceptor.java:84) 在 org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:51) 在 org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:40) 在 org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272) 在 org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:113) 在 org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:69) 在 org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:34) 在 org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272) at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:849) 在 org.apache.cxf.transport.http.HTTPConduit $ WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1626) 在 org.apache.cxf.transport.http.HTTPConduit $ WrappedOutputStream.handleResponse(HTTPConduit.java:1515) 在 org.apache.cxf.transport.http.HTTPConduit $ WrappedOutputStream.close(HTTPConduit.java:1317) 在 org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56) 在 org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:632) 在 org.apache.cxf.interceptor.MessageSenderInterceptor $ MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62) 在 org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272) 在org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:572) 在org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:481)at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:382)at at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:335)at at org.apache.cxf.ws.security.trust.AbstractSTSClient.issue(AbstractSTSClient.java:855) 在 org.apache.cxf.ws.security.trust.STSClient.requestSecurityToken(STSClient.java:62) 在 org.apache.cxf.ws.security.trust.STSClient.requestSecurityToken(STSClient.java:56) 在 org.apache.cxf.ws.security.trust.STSClient.requestSecurityToken(STSClient.java:52) 在testwebservice.testprogram.main(testprogram.java:43)