Search the FirstSpirit Knowledge Base
Hallo zusammen!
Wir haben ein Crowd-LoginModule für unsere Atlassian-Crowd entwickelt und wollten dieses bei FirstSpirit Anmeldung einsetzen.
Das JAR-File mit dem Crowd-LoginModule haben wir in <fs-server>/shared/lib Ordner abgelegt.
Die fs-jaas.conf Konfiguration wurde wie folgt angepasst:
/*
* JAAS Login Configurations.
* (for app-to-config mappings see fs-server.conf, JAAS.*)
*/
/* access api authentication (e.g., for remote projects) */
system {
de.espirit.firstspirit.server.authentication.FSUserLoginModule sufficient hash="true";
de.espirit.firstspirit.server.authentication.FSTicketLoginModule sufficient;
};
/* JavaClient without Webstart, without SSO */
plain {
net.payback.global.portal.firstspirit.crowd.CrowdLoginModule optional section="CROWD";
// de.espirit.firstspirit.server.authentication.LdapLoginModule optional section="LDAP";
de.espirit.firstspirit.server.authentication.FSUserLoginModule optional;
};
/* JavaClient without Webstart, with SSO */
sso {
de.espirit.firstspirit.server.authentication.FSTicketLoginModule sufficient;
// de.espirit.firstspirit.server.authentication.LdapLoginModule optional section="LDAP";
de.espirit.firstspirit.server.authentication.FSUserLoginModule optional;
};
/* FirstSpirit start page without SSO: WebClient, JavaClient with Webstart */
webplain {
net.payback.global.portal.firstspirit.crowd.CrowdLoginModule optional section="CROWD";
// de.espirit.firstspirit.server.authentication.LdapLoginModule optional section="LDAP";
de.espirit.firstspirit.server.authentication.FSUserLoginModule optional;
};
/* FirstSpirit start page with SSO: WebClient, JavaClient with Webstart */
websso {
de.espirit.firstspirit.server.authentication.FSTicketLoginModule sufficient;
// de.espirit.firstspirit.server.authentication.KerberosLoginModule optional useFullPrincipal="false";
// de.espirit.firstspirit.server.authentication.RequestHeaderLoginModule optional authHeader="iv-user"
// allowedCerts="CN=proxy1,OU=editors,DC=domain;CN=proxy2,OU=editors,DC=domain"
// allowedAddrs="10.11.12.13;10.11.12.14";
// de.espirit.firstspirit.server.authentication.LdapLoginModule optional section="LDAP";
de.espirit.firstspirit.server.authentication.FSUserLoginModule optional;
};
/* required additional configuration for KerberosLoginModule: */
/*
com.sun.security.jgss.accept {
com.sun.security.auth.module.Krb5LoginModule required
principal="HTTP/fs4host.mydomain.net@MYDOMAIN.NET"
keyTab="/opt/firstspirit4/conf/fs4host-HTTP.keytab"
useKeyTab="true"
storeKey="true"
isInitiator="false"
doNotPrompt="true"
debug="false";
};
*/
Das Anmelden über die FirstSpirit-Web-Oberfläche funktioniert einwandfrei und erzeugt folgende LOG-Ausgabe:
INFO 29.08.2016 09:59:20.771 (net.payback.global.portal.firstspirit.crowd.CrowdAuthentication): CrowdAuthentication | init.
INFO 29.08.2016 09:59:21.172 (net.payback.global.portal.firstspirit.crowd.CrowdLoginModule): Crowd authentication for user 'dmihajluk' succeeded.
INFO 29.08.2016 09:59:21.175 (de.espirit.firstspirit.server.authentication.FSUserLoginModule): login failed: User does not exist or password is invalid!
INFO 29.08.2016 09:59:21.180 (de.espirit.firstspirit.server.usermanagement.UserManagerImpl): App Password 'Default' login from address '127.0.0.1' granted
INFO 29.08.2016 09:59:21.182 (de.espirit.firstspirit.server.sessionmanagement.SessionManagerImpl): Client called 'login' from ip 127.0.0.1
INFO 29.08.2016 09:59:21.183 (de.espirit.firstspirit.server.sessionmanagement.SessionManagerImpl): new session (ID=84106025277266581, user=dmihajluk, userID=26557, type=WEB) created
INFO 29.08.2016 09:59:21.183 (de.espirit.firstspirit.server.sessionmanagement.SessionManagerImpl): Session with ID=84106025277266581 bound to ip 127.0.0.1
INFO 29.08.2016 09:59:21.191 (de.espirit.firstspirit.io.servlet.WebAuthentication): web login successful, user=UserDTO[id=26557, login=dmihajluk, name='Danil Mihajluk', mail=danil.mihajluk@payback.net], session=84106025277266581
Wenn ich mich entweder direkt über Konsolenaufruf
java -Dmode=http -Dhost=localhost -Dport=8000 -Dlogin.user=user -Dlogin.password=pass -jar fs-client.jar
oder programmatisch über
de.espirit.firstspirit.access.Connection connection = de.espirit.firstspirit.access.ConnectionManager.getConnection(host, port, mode, username, password);
connection.connect();
mit FirstSpirit verbinden möchte, dann funktioniert das nicht und resultiert in folgender LOG-Ausgabe:
ERROR 29.08.2016 10:00:40.154 (de.espirit.firstspirit.logging.ServerLogging): Client error: login failed from 10.51.18.92: LoginModule-Klasse kann nicht gefunden werden: net.payback.global.portal.firstspirit.crowd.CrowdLoginModule
Hat jemand eine Idee woran es liegen könnte, dass die Klasse plötzlich nicht gefunden werden kann, obwohl sie ein paar Sekunden davor noch da war?
Vielen Dank im Voraus!
Danil.
Johannes Brunswicker schrieb:
funktioniert der Konsolenaufruf denn, wenn Sie über den -cp Parameter den Classpath so erweitern, das ihr CrowdLoginModule.jar mit inkludiert wird?
Der Aufruf könnte dann wie folgt aussehen
java -cp /path/to/CrowdLoginModule.jar -Dmode=http -Dhost=localhost -Dport=8000 -Dlogin.user=user -Dlogin.password=pass -jar fs-client.jar
Das ist in der Kommandozeile leider ein Fehler, "-cp" und "-jar" können nicht kombiniert werden. Korrekt muss der Aufruf wie folgt lauten:
java -cp "CrowdLoginModule.jar;fs-client.jar" -Dmode=http -Dhost=localhost -Dport=8000 -Dlogin.user=user -Dlogin.password=pass net.payback.global.portal.firstspirit.CLI
In dieser Kombination sollte das funktionieren.
Hallo Herr Mihajluk,
funktioniert der Konsolenaufruf denn, wenn Sie über den -cp Parameter den Classpath so erweitern, das ihr CrowdLoginModule.jar mit inkludiert wird?
Der Aufruf könnte dann wie folgt aussehen
java -cp /path/to/CrowdLoginModule.jar -Dmode=http -Dhost=localhost -Dport=8000 -Dlogin.user=user -Dlogin.password=pass -jar fs-client.jar
Mit freundlichen Grüßen
Johannes Brunswicker
Hallo Johannes,
danke für die Antwort.
Leider hat es nicht geholfen.
Grüße
Danil.
Hallo Johannes,
habt Ihr eine weitere Idee?
Danke & Grüße,
Maik
Issue ist beim tecsupport in der analyse...
Hier der Stack-Trace vom Fehlerfall:
2016-09-07 14:20:11,491 [main] INFO net.payback.global.portal.firstspirit.common.connection.ConnectionHandler - Try to get connection for [ host:localhost | port:8000 | mode:1 | username:dmihajluk | password:****** ]
2016-09-07 14:20:12,894 [main] ERROR net.payback.global.portal.firstspirit.common.connection.ConnectionHandler - Connection failed due to: couldn't authenticate!
de.espirit.firstspirit.server.authentication.AuthenticationException: couldn't authenticate!
at de.espirit.firstspirit.client.io.ConnectionImpl.connect(ConnectionImpl.java:254)
at net.payback.global.portal.firstspirit.common.connection.ConnectionHandler.tryToConnect(ConnectionHandler.java:87)
at net.payback.global.portal.firstspirit.common.connection.ConnectionHandler.getConnection(ConnectionHandler.java:65)
at net.payback.global.portal.firstspirit.common.task.AbstractConnectionTask.getConnection(AbstractConnectionTask.java:28)
at net.payback.global.portal.firstspirit.migration.jobs.AbstractMigrationJob.getProject(AbstractMigrationJob.java:152)
at net.payback.global.portal.firstspirit.migration.jobs.AbstractMigrationJob.doLockUnlockProject(AbstractMigrationJob.java:178)
at net.payback.global.portal.firstspirit.migration.jobs.AbstractMigrationJob.preMigrate(AbstractMigrationJob.java:316)
at net.payback.global.portal.firstspirit.migration.jobs.AbstractMigrationJob.execute(AbstractMigrationJob.java:339)
at net.payback.global.portal.firstspirit.migration.MigrationTask.execute(MigrationTask.java:37)
at net.payback.global.portal.firstspirit.migration.MigrationProxy.execute(MigrationProxy.java:18)
at net.payback.global.portal.firstspirit.CLI.main(CLI.java:124)
Caused by: javax.security.auth.login.LoginException: LoginModule-Klasse kann nicht gefunden werden: net.payback.global.portal.firstspirit.crowd.CrowdLoginModule
at javax.security.auth.login.LoginContext.invoke(Unknown Source)
at javax.security.auth.login.LoginContext.access$000(Unknown Source)
at javax.security.auth.login.LoginContext$4.run(Unknown Source)
at javax.security.auth.login.LoginContext$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.login.LoginContext.invokePriv(Unknown Source)
at javax.security.auth.login.LoginContext.login(Unknown Source)
at de.espirit.firstspirit.server.authentication.AuthLoginContext.login(AuthLoginContext.java:30)
at de.espirit.firstspirit.client.io.ConnectionImpl.connect(ConnectionImpl.java:230)
... 10 more
2016-09-07 14:20:12,895 [main] ERROR net.payback.global.portal.firstspirit.CLI - couldn't authenticate!
Johannes Brunswicker schrieb:
funktioniert der Konsolenaufruf denn, wenn Sie über den -cp Parameter den Classpath so erweitern, das ihr CrowdLoginModule.jar mit inkludiert wird?
Der Aufruf könnte dann wie folgt aussehen
java -cp /path/to/CrowdLoginModule.jar -Dmode=http -Dhost=localhost -Dport=8000 -Dlogin.user=user -Dlogin.password=pass -jar fs-client.jar
Das ist in der Kommandozeile leider ein Fehler, "-cp" und "-jar" können nicht kombiniert werden. Korrekt muss der Aufruf wie folgt lauten:
java -cp "CrowdLoginModule.jar;fs-client.jar" -Dmode=http -Dhost=localhost -Dport=8000 -Dlogin.user=user -Dlogin.password=pass net.payback.global.portal.firstspirit.CLI
In dieser Kombination sollte das funktionieren.
Hallo Peter,
danke für den Hinweis!
So funktioniert es!
Grüße
Danil.