2016-11-14 7 views
0

В настоящее время мы работаем над проектом, в котором нам нужно получить доступ к API веб-сервисов Sharepoint Foundation на сайте Sharepoint 2016, использующем аутентификацию на основе требований. Служба токена безопасности, используемая для подачи заявок, представляет собой ADFS 2.0, размещенную на сервере Win2k12. Пользователь должен представить свой адрес электронной почты для аутентификации и получения маркера безопасности для дальнейших операций.Сайт Sharepoint на основе утверждений и связь с Apache CXF STSClient

Примечание: Поскольку это установка DEV мы используем самоподписанный сертификат для конечной точки ADFS

Мы используем Apache CXF 2.7.12 и JDK 8 в качестве стека разработки клиента для доступа к этому веб оказание услуг. Когда мы запрашиваем токен, исключение, связанное с отказом утверждения HttpsToken, регистрируется на уровне WARNING, а затем ничего не происходит. Вызов не завершен, и мы должны убить процесс.

Поскольку это первый раз, когда мы используем CXF; запросить некоторую помощь и рекомендации в отношении решения этой проблемы. Мы ссылались на следующие сайты для первоначального расследования, но ни один из них не кажется, что помогает нам с этой конкретной проблемы:

Using Apache CXF to connect CRM Dynamics

Apache CXF Client Configuration options

Ниже WS-Policy для сайта Sharepoint как доступны на URL

<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> 

теперь настроить STSClient следующим образом:

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 вызов бросает предупреждение, которое показано ниже:

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

WSDL, требует, чтобы TransportBinding быть использованы, но вы не используете "HTTPS" URL, например: "http://mysharepointsite.com/_trust"

+0

Спасибо за этот ответ. Я понял, что это опечатка в коде. Однако даже после этого изменения; проблема все еще сохраняется. Единственный способ обойти эту проблему - указать переопределение политики с пустой политикой WSP. Но я знаю это * Hack *. Любые другие советы по устранению неполадок будут отличными. Кроме того, с этой пустой политикой XML ошибка Https исчезла, но теперь я получаю сообщение об ошибке {http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}TransportBinding: Полученная временная метка не соответствует требования. Что это значит? –