OD SSO - issue calling websphere java class WSCallbackHandlerImpl

Previous topic - Next topic

Andreas Baaserud Hauge

Hi,

Not sure if this topic is suitable for this forum or not..since it is related to OD authentication, I'll give it a shot.

System information:
OnDemand: 10.1.0.5
WebSphere 8.5.5 fixpack 20
Content Navigator 3.0.7

OnDemand configuration:

  • SSO enabled
  • AD users synchronised

WebSphere configuration:

  • SSO enabled
  • AD integration(SPNEGO/Kerberos)

Content Navigator configuration:

  • Deployed to WebSphere with Application Authentication enabled
  • Desktop, SSO enabled

When an AD user(i.e wasadmin) access the SSO Navigator Desktop, I receive the following error in WebSphere application server
SystemOut     O CIWEB Error: [wasadmin @ adserver] com.ibm.ecm.struts.actions.od.ODLogonAction.createODConnection()
java.lang.NoClassDefFoundError: com.ibm.websphere.security.auth.callback.WSCallbackHandlerImpl
        at com.ibm.edms.od.ODServer.logonICN(ODServer.java:484)
        at com.ibm.ecm.struts.actions.od.ODLogonAction.createODConnection(ODLogonAction.java:307)
        at com.ibm.ecm.struts.actions.GetDesktopAction.desktopConnect(GetDesktopAction.java:431)
        at com.ibm.ecm.struts.actions.GetDesktopAction.executeBaseAction(GetDesktopAction.java:148)
        at com.ibm.ecm.struts.actions.BaseActionHandlerImpl.executeAction(BaseActionHandlerImpl.java:472)
        at com.ibm.ecm.struts.actions.BaseAction.execute(BaseAction.java:76)
        at com.ibm.ecm.jaxrs.Actions.loadAndExecuteAction(Actions.java:719)
        at com.ibm.ecm.jaxrs.Actions.handleAction(Actions.java:111)
        at com.ibm.ecm.jaxrs.Actions.handlePostActions(Actions.java:148)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:90)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
        at java.lang.reflect.Method.invoke(Method.java:508)
        at org.apache.wink.server.internal.handlers.InvokeMethodHandler.handleRequest(InvokeMethodHandler.java:63)
        at org.apache.wink.server.handlers.AbstractHandler.handleRequest(AbstractHandler.java:33)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
        at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
        at org.apache.wink.server.internal.handlers.CreateInvocationParametersHandler.handleRequest(CreateInvocationParametersHandler.java:54)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
        at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
        at org.apache.wink.server.handlers.AbstractHandler.handleRequest(AbstractHandler.java:34)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
        at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
        at org.apache.wink.server.internal.handlers.FindResourceMethodHandler.handleSubResourceMethod(FindResourceMethodHandler.java:188)
        at org.apache.wink.server.internal.handlers.FindResourceMethodHandler.handleRequest(FindResourceMethodHandler.java:110)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
        at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
        at org.apache.wink.server.internal.handlers.FindRootResourceHandler.handleRequest(FindRootResourceHandler.java:95)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
        at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
        at org.apache.wink.server.internal.handlers.HeadMethodHandler.handleRequest(HeadMethodHandler.java:53)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
        at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
        at org.apache.wink.server.internal.handlers.OptionsMethodWADLHandler.handleRequest(OptionsMethodWADLHandler.java:51)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
        at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
        at org.apache.wink.server.internal.handlers.SearchResultHandler.handleRequest(SearchResultHandler.java:33)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
        at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
        at org.apache.wink.server.internal.log.ResourceInvocation.handleRequest(ResourceInvocation.java:92)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
        at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
        at org.apache.wink.server.internal.log.Requests.handleRequest(Requests.java:76)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
        at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
        at org.apache.wink.server.handlers.AbstractHandlersChain.run(AbstractHandlersChain.java:60)
        at org.apache.wink.server.internal.RequestProcessor.handleRequestWithoutFaultBarrier(RequestProcessor.java:207)
        at org.apache.wink.server.internal.RequestProcessor.handleRequest(RequestProcessor.java:154)
        at org.apache.wink.server.internal.servlet.RestServlet.service(RestServlet.java:124)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1233)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:782)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:481)
        at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:136)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:97)
        at com.ibm.ecm.filters.ESAPIWafFilter.doFilter(ESAPIWafFilter.java:267)
        at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91)
        at com.ibm.ecm.filters.CORSFilter.doFilter(CORSFilter.java:96)
        at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91)
        at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:967)
        at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1107)
        at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:4075)
        at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:304)
        at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1019)
        at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1817)
        at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:213)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:463)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:530)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:316)
        at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:88)
        at com.ibm.ws.ssl.channel.impl.SSLReadServiceContext$SSLReadCompletedCallback.complete(SSLReadServiceContext.java:1833)
        at com.ibm.ws.tcp.channel.impl.WorkQueueManager.requestComplete(WorkQueueManager.java:558)
        at com.ibm.ws.tcp.channel.impl.WorkQueueManager.attemptIO(WorkQueueManager.java:608)
        at com.ibm.ws.tcp.channel.impl.WorkQueueManager.workerRun(WorkQueueManager.java:985)
        at com.ibm.ws.tcp.channel.impl.WorkQueueManager$Worker.run(WorkQueueManager.java:1074)
        at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1892)
Caused by: java.lang.ClassNotFoundException: com.ibm.websphere.security.auth.callback.WSCallbackHandlerImpl
        at java.net.URLClassLoader.findClass(URLClassLoader.java:610)
        at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:942)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:887)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:870)


The exception says class com.ibm.websphere.security.auth.callback.WSCallbackHandlerImpl is not found. I have verified that the jar file where com.ibm.websphere.security.auth.callback.WSCallbackHandlerImpl is located is loaded in WebSphere(sas.jar). Would it be beneficial if I included this jar file in the navigator war file, though I would expect navigator to be able to reach the jar file when its available on the same node as navigator.

Anyone can guide me somewhere? I have kind of hit the end of the tunnel right now :-\ thanks in advance  :)
ABH

rjrussel

It would appear something has screwed up the classpath in WAS and that is the cause of the error. I am not sure how you are setting the classpath for the other requirements but I wonder if that has overridden the WAS defaults.

-RR

Andreas Baaserud Hauge

Thanks for your reply! :)

As you can see, I've loaded some of the OnDemand api's.

Classpath = /opt/IBM/WebSphere/AppServer/profiles/icn/properties:/opt/IBM/WebSphere/AppServer/properties:/opt/IBM/WebSphere/AppServer/lib/startup.jar:/opt/IBM/WebSphere/AppServer/lib/bootstrap.jar:/opt/IBM/WebSphere/AppServer/lib/lmproxy.jar:/opt/IBM/WebSphere/AppServer/lib/urlprotocols.jar:/opt/IBM/WebSphere/AppServer/deploytool/itp/batchboot.jar:/opt/IBM/WebSphere/AppServer/deploytool/itp/batch2.jar:/opt/IBM/WebSphere/AppServer/java/lib/tools.jar:/opt/IBM/ondemand/V10.1/www/api/ODApi.jar:/opt/IBM/ondemand/V10.1/jars/gson-2.8.1.jar

Java Library path = /opt/IBM/WebSphere/AppServer/lib/native/aix/ppc_64/:/opt/IBM/WebSphere/AppServer/java/jre/lib/ppc64/compressedrefs:/opt/IBM/WebSphere/AppServer/java/jre/lib/ppc64:/opt/IBM/WebSphere/AppServer/java/jre/lib/ppc64/j9vm:/opt/IBM/WebSphere/AppServer/java/jre/lib/ppc64:/opt/IBM/WebSphere/AppServer/java/jre/../lib/ppc64:/opt/IBM/WebSphere/AppServer/java/jre/lib/icc:/opt/IBM/WebSphere/AppServer/bin:/opt/IBM/ondemand/V10.1:/opt/IBM/ondemand/V10.1/www:/usr/lib64:/usr/lib:
ABH

rjrussel

Check on your WebSphere system where sas.jar is. It is what contains what WebSphere is looking for to validate the ltpa token.

Without knowing how you set the other jars I can't tell you what went wrong but something is over-riding the WAS default classpath.

Thanks,
RR

Andreas Baaserud Hauge

As a dirty test, I copied sas.jar to WAS_installation/profiles/profile/installedApps/Cell/navigatorEAR.ear/lib
Now it seems the class com.ibm.websphere.security.auth.callback.WSCallbackHandlerImpl is being loaded.

Looks like you are correct with something is up with my classpath, I'll update with my solution.

Thanks rjrussel
ABH