2016-11-14 1 views
0

현재 클레임 기반 인증을 사용하는 Sharepoint 2016 사이트 내에서 Sharepoint Foundation 웹 서비스 API에 액세스해야하는 프로젝트를 진행 중입니다. 클레임을 제공하는 데 사용되는 보안 토큰 서비스는 Win2k12 서버에서 호스팅되는 ADFS 2.0입니다. 사용자는 추후 작업을 위해 보안 토큰을 인증하고 획득하기 위해 자신의 전자 메일 주소를 제시해야합니다.클레임 기반 Sharepoint 사이트 및 Apache CXF STSClient 통신

참고 :이이 웹에 액세스하는 우리는 클라이언트 개발 스택을 아파치 CXF 2.7.12 및 JDK 8을 사용하는

우리는 ADFS 엔드 포인트에 대한 자체 서명 된 인증서를 사용하는 dev에 설정이기 때문에 서비스. 토큰을 요청할 때 HttpsToken 어설 션 오류와 관련된 예외가 WARNING 수준에 기록되고 아무 일도 일어나지 않습니다. 통화가 완료되지 않아 프로세스를 종료해야합니다.

CXF를 처음 사용하기 때문에, 이 문제를 해결하는 방법에 대한 도움과 안내를 요청하십시오. 우리는 초기 조사를 위해 다음 사이트라고하지만 그들 중 누구도이 특정 문제를 우리에게 도움이 될 것 같다되지 않은 : 다음

Using Apache CXF to connect CRM Dynamics

Apache CXF Client Configuration options

은 WS-정책은 SharePoint 사이트 등입니다 다음과 같이 우리는 지금 STSClient를 구성

<wsp:Policy wsu:Id="UserNameWSTrustBinding_IWSTrust13Async_policy"> 
<wsp:ExactlyOne> 
<wsp:All> 
<sp:TransportBinding> 
<wsp:Policy> 
<sp:TransportToken> 
<wsp:Policy> 
<sp:HttpsToken/> 
</wsp:Policy> 
</sp:TransportToken> 
<sp:AlgorithmSuite> 
<wsp:Policy> 
<sp:Basic256/> 
</wsp:Policy> 
</sp:AlgorithmSuite> 
<sp:Layout> 
<wsp:Policy> 
<sp:Strict/> 
</wsp:Policy> 
</sp:Layout> 
<sp:IncludeTimestamp/> 
</wsp:Policy> 
</sp:TransportBinding> 
<sp:SignedEncryptedSupportingTokens> 
<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:SignedEncryptedSupportingTokens> 
<sp:EndorsingSupportingTokens> 
<wsp:Policy> 
<sp:KeyValueToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never" wsp:Optional="true"/> 
<sp:SignedParts> 
<sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing"/> 
</sp:SignedParts> 
</wsp:Policy> 
</sp:EndorsingSupportingTokens> 
<sp:Wss11> 
<wsp:Policy/> 
</sp:Wss11> 
<sp:Trust13> 
<wsp:Policy> 
<sp:MustSupportIssuedTokens/> 
<sp:RequireClientEntropy/> 
<sp:RequireServerEntropy/> 
</wsp:Policy></sp:Trust13> 
<wsaw:UsingAddressing/> 
</wsp:All> 
</wsp:ExactlyOne> 
</wsp:Policy> 

의 URL로 볼 수 있습니다 :

STSClient spSTSClient = new STSClient(bus); 
spSTSClient.setTrust(new Trust10(SP12Constants.INSTANCE)); 
spSTSClient.setSoap12(); 


//would we also also need to set the token type and key type? 

// spSTSClient.setTokenType("urn:oasis:names:tc:SAML:2.0:assertion"); 
//spSTSClient.setKeyType("http://docs.oasis-open.org/ws-sx/ws-trust/200512/Bearer");   

spSTSClient.setWsdlLocation("https://myadfsserver.com/adfs/services/trust/mex"); 
spSTSClient.setServiceName("{http://schemas.microsoft.com/ws/2008/06/identity/securitytokenservice}SecurityTokenService"); 
    spSTSClient.setEndpointName("{http://schemas.microsoft.com/ws/2008/06/identity/securitytokenservice}UserNameWSTrustBinding_IWSTrust13Async"); 
      spSTSClient.setAddressingNamespace("http://www.w3.org/2005/08/addressing"); String sharePointUsername = “[email protected]"; 
String sharePointPassword = “foobar#”; 

SecurityToken secToken = spsSTSClient.requestSecurityToken("http://mysharepointsite.com/_trust"); 

requestSecurityToken 호출은 다음과 같습니다 경고를 던졌습니다 :

은 WSDL은 TransportBinding를 사용할 수 있지만, 예를 들면, "HTTPS"URL을 사용하지 않을 것을 요구
WARNING: Interceptor for {http://schemas.microsoft.com/ws/2008/06/identity/securitytokenservice}SecurityTokenService#{http://schemas.microsoft.com/ws/2008/06/identity/securitytokenservice}Trust13IssueAsync has thrown exception, unwinding now 
org.apache.cxf.ws.policy.PolicyException: Assertion of type {http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}HttpsToken could not be asserted: Not an HTTPs connection 
    at org.apache.cxf.ws.security.policy.interceptors.HttpsTokenInterceptorProvider$HttpsTokenOutInterceptor.assertHttps(HttpsTokenInterceptorProvider.java:144) 
    at org.apache.cxf.ws.security.policy.interceptors.HttpsTokenInterceptorProvider$HttpsTokenOutInterceptor.handleMessage(HttpsTokenInterceptorProvider.java:87) 
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272) 
    at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:570) 
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:479) 
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:382) 
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:335) 

답변

0
+0

이 응답에 감사드립니다. 코드에서 오타가 있음을 깨달았습니다. 그러나이 변화를 한 후에도. 문제는 여전히 지속됩니다. 이 문제를 해결할 수있는 유일한 방법은 비어있는 WSP 정책을 사용하여 정책 덮어 쓰기를 지정하는 것입니다. 하지만 내가 아는 건 * Hack *입니다. 문제 해결에 대한 다른 정보는 유용 할 것입니다. 또한이 빈 정책 XML을 사용하면 Https Error가 사라졌지 만 {http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}TransportBinding : Received Timestamp가 일치하지 않는다는 오류가 표시됩니다. 요구 사항. 이것은 무엇을 의미할까요? –

관련 문제