cancel
Showing results for 
Search instead for 
Did you mean: 

Problema con la autenticación WebScript

magarcia_sm
Star Contributor
Star Contributor

Buenos días,

     Os comento el problema que estoy teniendo. Tengo un Webscript formado por los archivos que os adjunto. Este Webscript lo tenía un una máquina con Alfresco 3.0 funcionando perfectamente. A través de la url le pasaba los parámetros que identifican una factura, se autenticaba y la mostraba directamente. Ahora he migrado Alfresco a la versión 4.2. El problema que tengo es que cuando hago la llamada me salta un popup para introducir el usuario y password y no me muestra la factura directamente, como si hiciese mal la autenticación.

Si hago la prueba con la siguiente url y un usuario me devuelve bien el ticket.

"${url.serviceContext}/api/login?u=${user}&pw=${pass}";

Pero creo que al hacer la llamada a la siguiente url está pasando mal el ticket (al hacer el substring)

"${url.serviceContext}/showContent?nFact=${nFact}&cPro=${cPro}&alf_ticket="+ticket;

¿Alguna idea de que puede estar pasando?

7 REPLIES 7

angelborroy
Community Manager Community Manager
Community Manager

El script debería funcionar sin autenticación, no?

   <authentication>none</authentication>

Hyland Developer Evangelist

Si, cierto Angel, ahora cambiandolo por "none" me devuelve el error de autenticación

The Web Script /alfresco/service/getContent has responded with a status of 500 - Internal Error.

500 Description: An error inside the HTTP server which prevented it from fulfilling the request.
Message:10100160 Wrapped Exception (with status template): A valid SecureContext was not provided in the RequestContext
Exception:net.sf.acegisecurity.AuthenticationCredentialsNotFoundException - A valid SecureContext was not provided in the RequestContext
net.sf.acegisecurity.intercept.AbstractSecurityInterceptor.credentialsNotFound(AbstractSecurityInterceptor.java:481)
net.sf.acegisecurity.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:359)
net.sf.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:77)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor.invoke(ExceptionTranslatorMethodInterceptor.java:46)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInterceptor.java:161)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
com.sun.proxy.$Proxy57.hasPermission(Unknown Source)
org.alfresco.service.cmr.repository.Path.toDisplayPath(Path.java:208)
org.alfresco.repo.web.scripts.RepoStore.getPath(RepoStore.java:297)
org.alfresco.repo.web.scripts.RepoStore.getBaseDir(RepoStore.java:262)
org.alfresco.repo.web.scripts.RepoStore.access$000(RepoStore.java:73)
org.alfresco.repo.web.scripts.RepoStore$RepoScriptContent.getPath(RepoStore.java:1070)
org.springframework.extensions.webscripts.ScriptProcessorRegistry.getScriptProcessor(ScriptProcessorRegistry.java:173)
org.springframework.extensions.webscripts.AbstractWebScript.executeScript(AbstractWebScript.java:1304)
org.springframework.extensions.webscripts.DeclarativeWebScript.execute(DeclarativeWebScript.java:86)
org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecute(RepositoryContainer.java:377)
org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecuteAs(RepositoryContainer.java:529)
org.alfresco.repo.web.scripts.RepositoryContainer.executeScript(RepositoryContainer.java:268)
org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:378)
org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:209)
org.springframework.extensions.webscripts.servlet.WebScriptServlet.service(WebScriptServlet.java:132)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
org.alfresco.web.app.servlet.GlobalLocalizationFilter.doFilter(GlobalLocalizationFilter.java:61)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
java.lang.Thread.run(Thread.java:724)
Exception:org.springframework.extensions.webscripts.WebScriptException - 10100160 Wrapped Exception (with status template): A valid SecureContext was not provided in the RequestContext
org.springframework.extensions.webscripts.AbstractWebScript.createStatusException(AbstractWebScript.java:1067)
Server:Community v4.2.0 (r63893-b12) schema 6.033
Time:10-nov-2016 12:09:24
Diagnostics:Inspect Web Script (getContent.get)

cesarista
World-Class Innovator
World-Class Innovator

Hola:

Has probado a ejecutarlo en dos pasos ? Primero obteniendo el ticket y luego ejecutando el otro servicio con el ticket.

Echando un ojo a la ftl y a como lo haces, me da que el substring que estas obteniendo se esta truncando y por eso no se autentica correctamente.

Saludos.

--C.

Hola Cesar,

   He cambiado el código para obtener el ticket con un getElementByTagName, ejecutandolo en 2 pasos jarcodeando me lo hace bien, pasandole los datos a mano. Pero cuando lo hago todo junto incluso jarcodeando el ticket me devuelve el anterior error 500. Parece que hay algún problema con el request. Pongo también el xml por si veis algo extraño. Gracias

<script type="text/javascript">
jQuery.support.cors = true;
var urlTicket = "${url.serviceContext}/api/login?u=${user}&pw=${pass}";
var ticket = "";
var request = $.get(urlTicket, function(data,status){
ticket = data.getElementsByTagName("ticket")[0].childNodes[0].nodeValue;
window.location.href = "${url.serviceContext}/showContent?nFact=${nFact}&cPro=${cPro}&alf_ticket="+ticket;
},'xml'
);
request.error(function(jqXHR, textStatus) {
if (textStatus == 'error'){
status.code = 403;
status.message = "User not found.";
status.redirect = true;
}
});
</script>

<webscript>
<shortname>Get Content</shortname>
<description>Show user specific content identified by parameters</description>
<url>/getContent?nFact={fileFact}&amp;cPro={filePro}&amp;user={userArgument}&amp;pass={passArgument}</url>
<authentication>none</authentication>
<transaction>required</transaction>
</webscript>

cesarista
World-Class Innovator
World-Class Innovator

Mmmm, seguramente será un problema relacionado con la petición CORS.

Cross-origin resource sharing - Wikipedia 

Saludos.

--C.

Muchas gracias pero la verdad no entiendo como está relacionado eso con mi problema (quizá por mi nivel). El mismo webscript en Alfresco 3 funcionaba correctamente. Lo volveré a revisar de todas formas.

Por si sirve de algo, el tema es que si estamos autenticados en el navegador con un usuario una pantalla, (es decir con una sesión abierta) y en otra pantalla del navegador introducimos la llamada url al webscrip funciona correctamente, con lo cual supongo que está obteniendo bien el ticket que le estamos introduciendo en la línea:

ticket = data.getElementsByTagName("ticket")[0].childNodes[0].nodeValue;
window.location.href = "${url.serviceContext}/showContent?nFact=${nFact}&cPro=${cPro}&alf_ticket="+ticket;

Sin embargo si ponemos la línea mal 

ticket = data.getElementsByTagName("ticket")[0].childNodes[0].nodeValue;
window.location.href = "${url.serviceContext}/showContent?nFact=${nFact}&cPro=${cPro}&alf_ticket=";

El sistema nos da un error.

Incluso si generamos un ticket a mano, y lo pegamos en la llamda a la url

ticket = data.getElementsByTagName("ticket")[0].childNodes[0].nodeValue;
window.location.href = "${url.serviceContext}/showContent?nFact=${nFact}&cPro=${cPro}&alf_ticket=TICKET_7439547375943749430e84745483739"

y no estamos logueados, la llamada falla también.

Parece cómo si en Alfresco 4.2 no podamos llamar al servicio showConent (que nosotros hemos definido) en nuestro webscript si no estamos previamente logueados en el navegador.

Alguna sugerencia con esto que acabamos de contar (por si os indica algún error que estemos cometiendo).

Gracias