Issue Details (XML | Word | Printable)

Key: CWD-385
Type: Improvement Improvement
Status: Resolved Resolved
Resolution: Fixed
Priority: Major Major
Assignee: Shihab Hamid [Atlassian]
Reporter: Justen Stepka [Atlassian]
Votes: 0
Watchers: 0
Operations

Add/Edit UI Mockup to this issue
If you were logged in you would be able to see more operations.
Crowd

Generated tokens have non-HTML escaped characters.

Created: 24/Jun/07 08:56 PM   Updated: 24/Jun/07 10:32 PM
Component/s: Integration/Connectors
Affects Version/s: 1.1 - OpenID Support
Fix Version/s: 1.1.1

Time Tracking:
Not Specified

File Attachments: 1. Java Archive File crowd-core-1.1.0.jar (284 kB)


Participants: Don Coleman, Justen Stepka [Atlassian] and Shihab Hamid [Atlassian]
Since last comment: 1 year, 21 weeks, 3 days ago
Resolution Date: 24/Jun/07 09:02 PM
Labels:


 Description  « Hide

My application authenticates with Crowd and sets the token in crowd.token_cookie.

Unfortunately Crowd and JIRA can't use this cookie to authenticate.

Ruby escapes the "=" in the token, since "=" is a delimiter in a cookie string.

The token 'aUgRv7qEAHCSiIrACZoYtg==' is written as 'aUgRv7qEAHCSiIrACZoYtg%3D%3D'



 All   Comments   Work Log   Change History      Sort Order: Ascending order - Click to sort in descending order
Shihab Hamid [Atlassian] added a comment - 24/Jun/07 09:02 PM
The TokenGenerator has been modified to produce URL-safe tokens.

Originally tokens were Base64 encoded. This encoding scheme can produce characters in the set A-Za-z0-9 and +, =, /, *. The non-alphanumeric characters in the token are stripped out and filled with 0's.


Justen Stepka [Atlassian] added a comment - 24/Jun/07 09:08 PM
To apply the jar file as a patch for your current Crowd release (1.1.0), please do the following:
  1. Stop Crowd from running (ie. performing a shutdown of Tomcat)
  2. Remove the following file from Crowd: atlassian-crowd-1.1.0/crowd-webapp/WEB-INF/lib/crowd-core-1.1.0.jar
  3. Replace the file you deleted above with the attached file.
  4. Restart Crowd (ie running start_crowd.sh)

If you have any problems with these steps, please comment below.


Don Coleman added a comment - 24/Jun/07 10:06 PM
/usr/local/crowd $ ./start_crowd.sh
Using CATALINA_BASE: ./apache-tomcat-5.5.20
Using CATALINA_HOME: ./apache-tomcat-5.5.20
Using CATALINA_TMPDIR: ./apache-tomcat-5.5.20/temp
Using JRE_HOME: /System/Library/Frameworks/JavaVM.framework/Home
Jun 24, 2007 10:47:19 PM org.apache.coyote.http11.Http11BaseProtocol init
INFO: Initializing Coyote HTTP/1.1 on http-8095
Jun 24, 2007 10:47:19 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 460 ms
Jun 24, 2007 10:47:19 PM org.apache.catalina.realm.JAASRealm setContainer
INFO: Set JAAS app name Catalina
Jun 24, 2007 10:47:19 PM org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
Jun 24, 2007 10:47:19 PM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/5.5.20
Jun 24, 2007 10:47:19 PM org.apache.catalina.core.StandardHost start
INFO: XML validation disabled
22:47:22,189 INFO com.atlassian.crowd.startup: Starting Crowd, Version: 1.1.0 (Build:#174 - Jun 22, 2007)

*******************************************************************************
*

22:47:22,246 ERROR org.springframework.web.context.ContextLoader: Context initialization failed
org.springframework.beans.factory.BeanDefinitionStoreException: Error registering bean with name 'csvImporterDAO' defined in class path resource [applicationContextImporter.xml]: Bean class [com.atlassian.crowd.importer.dao.impl.CsvImporterDAO] not found; nested exception is java.lang.ClassNotFoundException: com.atlassian.crowd.importer.dao.impl.CsvImporterDAO
java.lang.ClassNotFoundException: com.atlassian.crowd.importer.dao.impl.CsvImporterDAO
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1355)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1201)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:242)
at org.springframework.util.ClassUtils.forName(ClassUtils.java:109)
at org.springframework.beans.factory.support.BeanDefinitionReaderUtils.createBeanDefinition(BeanDefinitionReaderUtils.java:65)
at org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.parseBeanDefinitionElement(DefaultXmlBeanDefinitionParser.java:466)
at org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.parseBeanDefinitionElement(DefaultXmlBeanDefinitionParser.java:432)
at org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.parseBeanDefinitions(DefaultXmlBeanDefinitionParser.java:347)
at org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.registerBeanDefinitions(DefaultXmlBeanDefinitionParser.java:197)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:295)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:223)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:173)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:148)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:129)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:145)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:126)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:89)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:262)
at org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.refresh(AbstractRefreshableWebApplicationContext.java:139)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:252)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:190)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)
at com.atlassian.spring.container.ContainerContextLoaderListener.contextInitialized(ContainerContextLoaderListener.java:32)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3763)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4211)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:608)
at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:535)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1122)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:310)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1021)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1013)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442)
at org.apache.catalina.core.StandardService.start(StandardService.java:450)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:709)
at org.apache.catalina.startup.Catalina.start(Catalina.java:551)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:432)
22:47:22,249 ERROR core.ContainerBase.[Catalina].[localhost].[/crowd]: Exception sending context initialized event to listener instance of class com.atlassian.crowd.setup.CrowdContextLoaderListener
org.springframework.beans.factory.BeanDefinitionStoreException: Error registering bean with name 'csvImporterDAO' defined in class path resource [applicationContextImporter.xml]: Bean class [com.atlassian.crowd.importer.dao.impl.CsvImporterDAO] not found; nested exception is java.lang.ClassNotFoundException: com.atlassian.crowd.importer.dao.impl.CsvImporterDAO
java.lang.ClassNotFoundException: com.atlassian.crowd.importer.dao.impl.CsvImporterDAO
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1355)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1201)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:242)
at org.springframework.util.ClassUtils.forName(ClassUtils.java:109)
at org.springframework.beans.factory.support.BeanDefinitionReaderUtils.createBeanDefinition(BeanDefinitionReaderUtils.java:65)
at org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.parseBeanDefinitionElement(DefaultXmlBeanDefinitionParser.java:466)
at org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.parseBeanDefinitionElement(DefaultXmlBeanDefinitionParser.java:432)
at org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.parseBeanDefinitions(DefaultXmlBeanDefinitionParser.java:347)
at org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.registerBeanDefinitions(DefaultXmlBeanDefinitionParser.java:197)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:295)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:223)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:173)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:148)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:129)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:145)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:126)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:89)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:262)
at org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.refresh(AbstractRefreshableWebApplicationContext.java:139)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:252)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:190)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)
at com.atlassian.spring.container.ContainerContextLoaderListener.contextInitialized(ContainerContextLoaderListener.java:32)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3763)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4211)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:608)
at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:535)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1122)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:310)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1021)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1013)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442)
at org.apache.catalina.core.StandardService.start(StandardService.java:450)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:709)
at org.apache.catalina.startup.Catalina.start(Catalina.java:551)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:432)
22:47:22,252 ERROR core.ContainerBase.[Catalina].[localhost].[/crowd]: Exception sending context initialized event to listener instance of class com.atlassian.crowd.console.listener.UpgradeListener
java.lang.NullPointerException
at com.atlassian.spring.container.ContainerManager.getComponent(ContainerManager.java:32)
at com.atlassian.crowd.console.listener.UpgradeListener.contextInitialized(UpgradeListener.java:30)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3763)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4211)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:608)
at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:535)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1122)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:310)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1021)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1013)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442)
at org.apache.catalina.core.StandardService.start(StandardService.java:450)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:709)
at org.apache.catalina.startup.Catalina.start(Catalina.java:551)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:432)
Jun 24, 2007 10:47:22 PM org.apache.catalina.core.StandardContext start
SEVERE: Error listenerStart
Jun 24, 2007 10:47:22 PM org.apache.catalina.core.StandardContext start
SEVERE: Context [/crowd] startup failed due to previous errors
Jun 24, 2007 10:47:22 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(/usr/local/atlassian-crowd-1.1.0/apache-tomcat-5.5.20/webapps/../../crowd-openidclient-webapp/WEB-INF/lib/servlet-api-2.3.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
22:47:23,561 INFO crowd.openid.client.filter.VerifyOpenIDAuthenticationFilter: Initializing filter 'verify-openid-filter'
22:47:23,571 INFO crowd.openid.client.filter.VerifyOpenIDAuthenticationFilter: Filter 'verify-openid-filter' configured successfully
Jun 24, 2007 10:47:23 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(/usr/local/atlassian-crowd-1.1.0/apache-tomcat-5.5.20/webapps/../../crowd-openidserver-webapp/WEB-INF/lib/servlet-api-2.3.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
22:47:25,017 INFO com.atlassian.crowd.startup: Starting Crowd OpenID Server, Version: 1.1.0 (Build:#174 - Jun 22, 2007)

*********************************************************************************************
*

  • You can now use the Crowd OpenID server by visiting http://localhost:8095/openidserver
    *
    *********************************************************************************************

Jun 24, 2007 10:47:27 PM org.apache.coyote.http11.Http11BaseProtocol start
INFO: Starting Coyote HTTP/1.1 on http-8095
Jun 24, 2007 10:47:27 PM org.apache.catalina.storeconfig.StoreLoader load
INFO: Find registry server-registry.xml at classpath resource
Jun 24, 2007 10:47:27 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 8309 ms
22:51:25,953 ERROR codehaus.xfire.transport.http.HttpChannel: Server returned error code = 404 for URI : http://localhost:8095/crowd/services/SecurityServer. Check server logs for details
22:51:25,956 FATAL integration.service.soap.client.GenericClient: Unable to connect to the crowd server: null :Could not invoke service.. Nested exception is org.codehaus.xfire.fault.XFireFault: Server returned error code = 404 for URI : http://localhost:8095/crowd/services/SecurityServer. Check server logs for details
org.codehaus.xfire.XFireRuntimeException: Could not invoke service.. Nested exception is org.codehaus.xfire.fault.XFireFault: Server returned error code = 404 for URI : http://localhost:8095/crowd/services/SecurityServer. Check server logs for details
org.codehaus.xfire.fault.XFireFault: Server returned error code = 404 for URI : http://localhost:8095/crowd/services/SecurityServer. Check server logs for details
at org.codehaus.xfire.fault.XFireFault.createFault(XFireFault.java:89)
at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:83)
at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:114)
at org.codehaus.xfire.client.Client.invoke(Client.java:336)
at org.codehaus.xfire.client.XFireProxy.handleRequest(XFireProxy.java:77)
at org.codehaus.xfire.client.XFireProxy.invoke(XFireProxy.java:57)
at $Proxy7.authenticateApplication(Unknown Source)
at com.atlassian.crowd.integration.service.soap.client.GenericClient.authenticate(GenericClient.java:223)
at com.atlassian.crowd.integration.service.soap.client.GenericClient.getApplicationToken(GenericClient.java:212)
at com.atlassian.crowd.integration.service.soap.client.SecurityServerClient.getDomain(SecurityServerClient.java:693)
at com.atlassian.crowd.integration.http.HttpAuthenticator.processClientCookieDomain(HttpAuthenticator.java:269)
at com.atlassian.crowd.integration.http.HttpAuthenticator.invalidateClient(HttpAuthenticator.java:46)
at com.atlassian.crowd.integration.http.HttpAuthenticator.logoff(HttpAuthenticator.java:249)
at com.atlassian.crowd.integration.http.HttpAuthenticator.authenticate(HttpAuthenticator.java:160)
at com.atlassian.crowd.openid.server.action.Login.execute(Login.java:28)


Don Coleman added a comment - 24/Jun/07 10:12 PM
I was able to get the sever to start

edit applicationContextImporter.xml (inside crowd-core-1.1.0.jar)

comment out csvImporterDAO in the importer factory
comment out csvImporterDAO bean definition

now the server starts

The fix looks like it works in Firefox. I can log into my Rails application and navigate to the Crowd console without logging in. I'm tracking down an issue in Safari.


Don Coleman added a comment - 24/Jun/07 10:32 PM
This works in Safari too, as long as I use the external address of the machine.

When I used localhost, Safari used the IPv6 localhost
23:21:18,200 DEBUG com.atlassian.crowd.authentication.TokenGenerator: Adding validation factor remote_address : 0:0:0:0:0:0:0:1%0

But the Ruby code use the IPv4 localhost
23:21:18,208 DEBUG com.atlassian.crowd.authentication.TokenGenerator: Adding validation factor remote_address : 127.0.0.1

So the tokens didn't match.