Servizio produttore CMIS non funziona
-
09-12-2019 - |
Domanda
Sto cercando di pubblicare documenti dai siti di SharePoint tramite il connettore CMS di Microsoft.
L'applicazione di consumo è multipla, incluso un portale di Liferay (in esecuzione su Linux), e altra farm di SharePoint 2010 (altro dominio, nessuna fiducia) con la web part del consumatore CMIS.
L'obiettivo finale è essere in grado di riflettere le autorizzazioni dell'utente sul lato consumante.
Il primo obiettivo, è almeno quello di mostrare un documento anonimo dai consumatori.
Ecco i dettagli del mio sito di produttori:
- .
- L'autenticazione dei reclami è abilitata.
- tre URL sono raggiungibili per l'applicazione Web:
- .
- https://site.corp.com : AUTH FBA, basato su un reindirizzamento dell'autenticazione CAS
- http://a.site.corp.com : Anonymous e FBA Auth
- http://admin.site.corp.com : Windos Auth per Amministrazione + Anonymous + FBA
- Gli utenti anonimi sono autorizzati a vedere il contenuto del sito intero
Il primo test non riuscito che ho fatto, è quello di aggiungere il webpart del consumatore CMIS nella mia altra fattoria (come ho detto, non c'è fiducia tra le fattorie né tra i domini).
Quando rilascio il WebPart, apro il riquadro degli strumenti e specifica
http://a.site.corp/sites/testcmis/_vti_bin/CMISSoapwsdl.aspx
come indirizzo WSDL. Fare clic su "Ottieni un elenco di repository" e ottenere immediatamente un errore "WSDL non raggiungibile".Se di aprire la pagina in Internet Explorer o Chrome, posso vedere il WSDL senza autenticazione richiesta.
Se I Fiddler il messaggio HTTP, posso vedere che ci sono due richieste:
- .
- Il primo sta leggendo il file WSDL senza errori (HTTP 200: OK). Posso vedere nel messaggio http il contenuto WSDL corretto
- Una seconda richiesta viene sparata, mirando
http://a.site.corp/sites/testcmis/_vti_bin/cmis/soap/RepositoryService.svc/anonymous
. Questa volta, ottengo un errore interno (HTTP 500.Io ottengo, come risposta, questo errore del servizio Web:
.<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body> <s:Fault> <faultcode xmlns:a="http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher">a:InternalServiceFault</faultcode> <faultstring xml:lang="en-GB">SecurityContextProperty is missing from the request Message, this may indicate security is configured incorrectly.</faultstring> <detail> <ExceptionDetail xmlns="http://schemas.datacontract.org/2004/07/System.ServiceModel" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <HelpLink i:nil="true"/> <InnerException i:nil="true"/> <Message>SecurityContextProperty is missing from the request Message, this may indicate security is configured incorrectly.</Message> <StackTrace> at System.ServiceModel.Dispatcher.SecurityImpersonationBehavior.StartImpersonation2(MessageRpc& rpc, ServiceSecurityContext securityContext, Boolean isSecurityContextImpersonationOn)
 at System.ServiceModel.Dispatcher.SecurityImpersonationBehavior.StartImpersonation(MessageRpc& rpc, IDisposable& impersonationContext, IPrincipal& originalPrincipal, Boolean& isThreadPrincipalSet)
 at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
 at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
 at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
 at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</StackTrace> <Type>System.InvalidOperationException</Type> </ExceptionDetail> </detail> </s:Fault> </s:Body> </s:Envelope>
Il
faultstring
mi fa infastidire. Il sito di destinazione consente anonimo, perché la comunicazione avrebbe stabilito un contesto di sicurezza?Il secondo test che non è stato più riuscito è necessario utilizzare il connettore del consumatore CMIS di Liferay SharePoint
Nel portale di Liferay (non il server di produzione. Questo è stato in esecuzione su una scatola di dev in esecuzione w2k8 r2), ho provato ad aggiungere un documento repository di Kind SharePoint CMIS.
ancora non funziona. Ancora Fiddler (che strumento meraviglioso non è vero?), Posso osservare un comportamento diverso. Anche due richieste vengono sparate (utilizzando il protocollo di riposo questa volta). Questa volta sto mirando a questo momento il prefisso degli ADRL URL:
- .
- La prima richiesta è recuperando i dettagli del repository utilizzando l'URL:
http://adm.site.corp/sites/testcmis/_vti_bin/cmis/rest/16ff1075-1069-4066-9048-3f9a8b002fd9?getRepositoryInfo
(il GUID è l'ID di una libreria documenti condivisa). Nessun errore, stato http 200 - La seconda richiesta se riceve un errore 403 . Fiddler mi sta mostrando un'intesta intestazione HTTP inaspettata nella risposta:
.
x-msdavext_error: 917656; Accesso negato. Prima di aprire i file in questa posizione, è necessario prima sfogliare il sito Web e selezionare l'opzione per accedere automaticamente.
La query inviata tramite l'API di riposo è questa:
.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <query xmlns="http://docs.oasis-open.org/ns/cmis/core/200908/" xmlns:ns2="http://docs.oasis-open.org/ns/cmis/messaging/200908/" xmlns:ns3="http://docs.oasis-open.org/ns/cmis/restatom/200908/"> <statement>SELECT cmis:objectId FROM cmis:folder WHERE IN_FOLDER('-1')</statement> <searchAllVersions>false</searchAllVersions> <includeAllowableActions>true</includeAllowableActions> <includeRelationships>none</includeRelationships> <renditionFilter>cmis:none</renditionFilter> <maxItems>1000</maxItems> <skipCount>0</skipCount> </query>
E, nei registri ULS, vedo questa volta:
.SharePoint Foundation Logging Correlation Data xmnv Medium Name=Request (POST:http://adm.site.corp.com:80/sites/testcmis/_vti_bin/cmis/rest/8ae634c6-cace-48cd-a9c6-10a311fd1968?Query) 30db2510-0247-4fc5-8454-79fdd83c856d SharePoint Foundation Logging Correlation Data xmnv Medium Site=/sites/testcmis 30db2510-0247-4fc5-8454-79fdd83c856d Unknown CMIS Repository Interfaces 0000 Verbose Current request url is http://adm.site.corp.com/sites/testcmis/_vti_bin/cmis/rest/8ae634c6-cace-48cd-a9c6-10a311fd1968?Query 30db2510-0247-4fc5-8454-79fdd83c856d Unknown CMIS Repository Interfaces 0000 Verbose Selected service: Microsoft.SharePoint.CMIS.Binding.CmisQueryService 30db2510-0247-4fc5-8454-79fdd83c856d Unknown CMIS Repository Interfaces 0000 Verbose Start calling into GetCurrentWeb. 30db2510-0247-4fc5-8454-79fdd83c856d Unknown CMIS Repository Interfaces 0000 Verbose statement : SELECT cmis:objectId FROM cmis:folder WHERE IN_FOLDER('-1') 30db2510-0247-4fc5-8454-79fdd83c856d Unknown CMIS Repository Interfaces 0000 Verbose searchAllVersions : false 30db2510-0247-4fc5-8454-79fdd83c856d Unknown CMIS Repository Interfaces 0000 Verbose includeRelationships : none 30db2510-0247-4fc5-8454-79fdd83c856d Unknown CMIS Repository Interfaces 0000 Verbose renditionFilter : cmis:none 30db2510-0247-4fc5-8454-79fdd83c856d Unknown CMIS Repository Interfaces 0000 Verbose includeAllowableActions : true 30db2510-0247-4fc5-8454-79fdd83c856d Unknown CMIS Repository Interfaces 0000 Verbose maxItems : 1000 30db2510-0247-4fc5-8454-79fdd83c856d Unknown CMIS Repository Interfaces 0000 Verbose skipCount : 0 30db2510-0247-4fc5-8454-79fdd83c856d Unknown CMIS Repository Interfaces 0000 Verbose Source id length is larger or equal than destination length id. Returned false. 30db2510-0247-4fc5-8454-79fdd83c856d SharePoint Foundation Monitoring b4ly High Leaving Monitored Scope (EnsureListItemsData). Execution Time=4.58745455078788 30db2510-0247-4fc5-8454-79fdd83c856d SharePoint Foundation General 8e2s Medium Unknown SPRequest error occurred. More information: 0x80070005 30db2510-0247-4fc5-8454-79fdd83c856d SharePoint Foundation Monitoring b4ly Medium Leaving Monitored Scope (Request (POST:http://adm.site.corp.com:80/sites/testcmis/_vti_bin/cmis/rest/8ae634c6-cace-48cd-a9c6-10a311fd1968?Query)). Execution Time=34.7641948906914 30db2510-0247-4fc5-8454-79fdd83c856d
Nota che se apro la pagina
http://adm.site.corp.com/sites/testcmis/_vti_bin/cmis/rest/8ae634c6-cace-48cd-a9c6-10a311fd1968?getRepositoryInfo
nel browser, funziona (ancora senza autenticazione).L'ultimo test che ho fatto, è stato identico al precedente, ma usando l'URL dell'app Web anonimo Stessi passaggi come prima, in Liferay, cerco di recuperare le informazioni del repository all'URL:
http://a.site.corp.com/sites/testcmis/_vti_bin/cmis/rest/8ae634c6-cace-48cd-a9c6-10a311fd1968?getRepositoryInfo
(di nuovo, questa pagina è raggiungibile con il browser).- .
- Una prima query viene rilasciata a
http://a.site.corp.com/sites/testcmis/_vti_bin/cmis/rest/8ae634c6-cace-48cd-a9c6-10a311fd1968?getRepositoryInfo
. Questo ha successo (http 200). - Una seconda query su
http://a.site.corp.com/sites/testcmis/_vti_bin/cmis/rest/8ae634c6-cace-48cd-a9c6-10a311fd1968?getRepositoryInfo&repositoryId=8ae634c6-cace-48cd-a9c6-10a311fd1968
. Anche questo ha successo (http 200). - e un'ultima query per
http://a.site.corp.com/sites/testcmis/_vti_bin/cmis/rest/8ae634c6-cace-48cd-a9c6-10a311fd1968?Query
.L'ultima query Throw A 403 HTTP Errore (proibito). Il corpo di questa query fattive è questo (come prima):
.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <query xmlns="http://docs.oasis-open.org/ns/cmis/core/200908/" xmlns:ns2="http://docs.oasis-open.org/ns/cmis/messaging/200908/" xmlns:ns3="http://docs.oasis-open.org/ns/cmis/restatom/200908/"> <statement>SELECT cmis:objectId FROM cmis:folder WHERE IN_FOLDER('-1')</statement> <searchAllVersions>false</searchAllVersions> <includeAllowableActions>true</includeAllowableActions> <includeRelationships>none</includeRelationships> <renditionFilter>cmis:none</renditionFilter> <maxItems>1000</maxItems> <skipCount>0</skipCount> </query>
.Per concludere, qualcuno ha mai potuto fare questo funzionamento e come?
- Una prima query viene rilasciata a
- La prima richiesta è recuperando i dettagli del repository utilizzando l'URL:
Soluzione
Concludiamo finalmente che l'utilizzo del connettore CMIS è un vicolo cieco.
Molte ragioni:
- .
- Il connettore è solo IT-US (può essere una soluzione alternativa creando manualmente i file di risorse).
-
È un incubo per rendere l'app di Java ad autenticarsi contro CMIS.
-
Ci sono così alcune risorse relative a questo connettore, che pensiamo che sia quasi non usato affatto.
- Se fallisce, come ottenere supporto?.Infatti, è stato meno rischioso e con un costo inferiore per costruire sia un servizio Web personalizzato in SharePoint e un connettore personalizzato nel lato dell'applicazione Java.