PDA

View Full Version : Login von Windowsrechner auf AS400 mittels Kerberos und Java



Haunted
15-09-11, 16:01
Hallo zusammen,

ich versuche seit einiger Zeit von meinem Windowsrechner aus auf die as400 zu connecten, mittels Java und JT400. Dabei soll der User nicht nach seinem Username/Passwort gefragt werden sondern der Login automatisch mittels Kerberos stattfinden. Meine bisherigen Versuche brachten allerdings keinen Erfolg, da es mit nie Möglich war ein Kerberos Ticket auszulesen.

Ich habe dazu allerdings auch keine brauchbaren Tutorials / Dokus im Internet gefunden und wollte einmal fragen ob jemand von euch damit schon Erfarhungen gemacht hat.

Wenn ja wäre ich über einen kleinen Codeschnipsel sehr dankbar.

MfG

Haunted

Fuerchau
15-09-11, 16:14
Normalerweise braucht der User keine weiteren Anmeldungen buw. das Programm braucht da auch nichts zu tun.
Wichtig ist halt, dass auch auf der AS/400 der SingleSignon installiert werden muss.
i5/OS network authentication service (http://publib.boulder.ibm.com/infocenter/iseries/v7r1m0/topic/rzakh/rzakh000.htm)
Single sign-on enablement (http://publib.boulder.ibm.com/infocenter/iseries/v7r1m0/topic/rzarl/rzarlsinglesign.htm?resultof=%22%73%69%6e%67%6c%65 %22%20%22%73%69%6e%67%6c%22%20%22%73%69%67%6e%6f%6 e%22%20%22%73%69%67%6e%6f%22%20)

Ansonsten kannst du bei allen jt400-Klassen für die Anmeldung natürlich User und Kennwort direkt selber angeben.

Haunted
15-09-11, 16:44
Mh also wenn ich bei der AS400 Instance keine setGSS... Methoden aufrufe und keine zusätzlichen Logininformationen hinterlege kommt ein Prompt der USER/PW abfragt. Wenn ich vorher as400.setGSSName(...); aufrufe dann kommt der Fehler "
Kerberos service ticket could not be retrieved.
".

Mein Qt ist allerdings nicht mehr als:


AS400 login = new AS400("as400");


login.setGSSName("user");
login.connectService(AS400.DATAQUEUE);

Fuerchau
15-09-11, 17:01
Dann steht Kerberos nicht zur Verfügung und du musst den normalen User mit Kennwort nutzen.

Haunted
16-09-11, 07:41
allerdings funktioniert Kerberos (Connect auch auf die AS400 per HTTP) in den Browsern, also die Kerberos Umgebung sollte richtig eingerichtet sein.

OMi
15-05-14, 02:41
Musste soeben derselbes Problem lösen:

Also:

es müssen Java Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files (http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html) für die verwendete Java-Version (hier Java 7) installiert werden (bei Java-Update nicht vergessen).

ganz wichtig ist, die Realms-Namen bzw. Domaine in Upper-Case einzugeben und System-Propertyjavax.security.auth.useSubjectCredsOnly auf false setzen.

System.setProperty("java.security.krb5.realm", "INTRA.MYDOMAIN.COM");
System.setProperty("java.security.krb5.kdc", "windows_ad.INTRA.MYDOMAIN.COM");

System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");


Kerberos Config kann auch in c:/Windows/krb5.ini eingegeben werden (Äquivalent auf iSeries ist:/QIBM/UserData/OS400/NetworkAuthentication/krb5.conf):

[libdefaults]
default_keytab_name = /QIBM/UserData/OS400/NetworkAuthentication/keytab/krb5.keytab
default_realm = INTRA.MYDOMAIN.COM
[realms]
INTRA.MYDOMAIN.COM = {
kdc = windows_ad.INTRA.MYDOMAIN.COM:88
kpasswd_server = windows_ad.INTRA.MYDOMAIN.COM:464
}
[domain_realm]
[capaths]

Im weiterem ist unter Windows die Eingabe in Registry zwindend:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Contro l\Lsa\Kerberos\Parameters
REG_DWORD name: allowtgtsessionkey
Value: 1


dann muss in Programm "nichts" gemacht werden (user sollte erst gar nicht eingegeben werden):
as400 = new AS400("iseries.intra.mydomain.com");
as400.connectService(AS400.COMMAND);


Falls es sich bei dem Windows-Benutzer, um Local-Admin with "UAC enabled" handelt, so muss das Programm (u.a. Eclipse) mit "Run as administrator" gestartet werden (sonst wird Ticket trotz Registry Eingaben nicht erstellt/gacacht).