Authentication Problem bei WebServices

AlexSpritze

Bekanntes Mitglied
Hallo,

ich benutze die Exchange WebServices gegen einen Server in der selben Domäne und habe das Problem, dass ich mich über einen anderen Account dort anmelden müsste, aber Java (oder was auch immer) automatisch meinen Account nimmt. Das heißt, z.B., ich kann mir damit meine eigenen Mails vom Exchange Server holen, aber nicht die von dem anderen Account, obwohl ich eigentlich explizit dessen Credentials per Authenticator.setDefault() angebe:

Java:
Authenticator.setDefault(
  new MyAuthenticator(username, pwd)
);

Egal was ich mache, das Programm „klaut“ scheint immer automatisch meine Credentials zu klauen. Hat jemand eine Ahnung, was ich da machen kann? Wenn ich einen ExchangeServer benutze, der nicht in der gleichen Domäne liegt, muss ich ja die Anmeldeinformationen explizit angeben. Nur, in dem obigen Fall kann ich sogar jeweils null als Benutzername und Passwort angeben und er ignoriert es einfach.

Interessant ist auch, dass Firefox und Internet Explorer mich auch nicht automatisch anmelden, wenn ich mir die WSDL-Datei auf dem Server angucken will. Wieso macht das Java!?

Vielen Dank schonmal für irgendwelche Tipps.
 

AlexSpritze

Bekanntes Mitglied
Okay, mal andersrum gefragt:

Ich baue per HTTPS eine Verbindung zu einem Server auf. Ich akzeptiere per Default alle SSL-Zertifikate (=DummyTrustManager). Und nun möchte ich mich explizit an diesen Server per Username/Password anmelden, aber da der Server in der selben Domain liegt, werde ich automatisch mit meinen aktuellen Benutzeraccount dort angemeldet.

Wie kann ich mich dabei explizit anmelden?

Sowas hier scheint gar nicht zu funktionieren:

Java:
    Authenticator.setDefault(new Authenticator() {

      @Override
      protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication("benutzer", "seinPassword".toCharArray());
      }
    });
 

AlexSpritze

Bekanntes Mitglied
Und nochmal anders gefragt :D

Wenn ich im Browser die URL https://server.domain.local/EWS/Exchange.asmx aufrufen will, sagt der Browser mir, dass er dem SSL-Zertifikat nicht vertraut. Das kann ich aber per Hand akzeptieren. Dann will er aber von mir für die weitere Verbindung Benutzername und Password wissen. Und dann komme ich zum Seiteninhalt.

Wenn ich das ganze nun in Java nachstelle:

1. Versuch

Java:
URL url = new URL("https://server.domain.local/ews/Services.wsdl");
    url.openConnection().connect();

Geht nicht, da gibt es eine Exception:
Code:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

2. Versuch

Ich habe eine Methode geschrieben, die die SSL-Zertifikate generell akzeptiert. Diese wird aufgerufen, bevor die Verbindunghergestellt wird.

Java:
private static void trustAllHttpsCertificates() throws Exception {

      //  Create a trust manager that does not validate certificate chains:
      javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
      javax.net.ssl.TrustManager tm = new MyTrustManager();
      trustAllCerts[0] = tm;
      javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL");

      sc.init(null, trustAllCerts, null);

      javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    }

Dabei ist MyTrustManager:

Java:
private static class miTM implements javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager {

    @Override
    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
      return null;
    }

    public boolean isServerTrusted( java.security.cert.X509Certificate[] certs ) {
      return true;
    }

    public boolean isClientTrusted( java.security.cert.X509Certificate[] certs ) {
      return true;
    }

    @Override
    public void checkServerTrusted( java.security.cert.X509Certificate[] certs, String authType )
            throws java.security.cert.CertificateException {
      return;
    }

    @Override
    public void checkClientTrusted( java.security.cert.X509Certificate[] certs, String authType ) throws java.security.cert.CertificateException {
      return;
    }
  }
}

Also das einfachste was geht. Damit kann ich die oben angegeben SSL-Url aufrufen und es kommt keine Exception. Das einzige was aus meiner Sicht fehlt, ist die Eingabe oder Festlegung der Zugriffsdaten, ähnlich wie ich es oben für einen Internet-Browser beschrieben habe. Wie soll das gehen? Ich vermute, dass in diesem Fall die Anmeldedaten meiner aktuellen Windowssitzung genommen werden, weil der Server sich in derselben Domain befindet.

Wie kann ich mich explizit am Server (per Basic Authentication) anmelden? Ich komme echt nicht weiter. Danke schonmal für irgendwelche Tipps! Oder Denkanstöße. Irgendwas ;)
 

FArt

Top Contributor
Ich habe das Szenario nicht ganz verstanden, was auch daran liegt, dass ich die Exchange WebServices nicht kenne.

Single SignOn (das passiert ja anscheinend) muss von dem Webservice unterstützt werden (der muss Kerberos Authentifizierung unterstützen, ob NTLM auch funktioniert, weiß ich nicht) und vom Client.
Ein Browser als Client kann das (wenn er richtig konfiguriert ist). Ein Java Client kann das auch (allerdings mit etwas Aufwand).
Meine Erfahrung: Firefox und IE machen silent single sign on mit dem angemeldeten Domänenuser. Opera hat grundsätzlich nachgefragt, mit der Option andere Benutzer angeben zu können (ein Feature? na ja...). Ob ich mit einem Java-Client andere Credentials einfach verwenden kann, weiß ich nicht.
Auf jeden Fall laufen die Zertifikate außer Konkurrenz.. die haben mit der Anmeldung nichts zu tun.

Vielleicht bringt dich diese Erfahrung einer Lösung ein wenig weiter.
 

AlexSpritze

Bekanntes Mitglied
Hi FArt,

ich vermute ja, dass das gar nicht soo viel mit den WebServices zu tun hat.

Ich versuche nochmal eine andere Sicht auf mein Problem zu geben. Ich möchte die WebServices mit einem Service Account benutzen. Dieser hat über Impersonation Zugriff auf alle anderen Postfächer des Servers, unter anderem auch meins. Ich bzw. mein Account hat dieses Recht nicht.

Wenn ich die WebServices benutze, muss/will ich mich mit dem Service Account an dem Server mit den entsprechenden Benutzerdaten anmelden. Und dann im zweiten Schritt gebe ich an, auf welches Postfach ich zugreifen will. Ich bin an dem Windows-PC, an dem ich entwickle mit meinem Konto angemeldet und bekomme, wenn ich ein Testprogramm ausführen will, eine Zugriffsverletzung als Fehler. Wenn ich mich nun umgekehrt mit dem Service Account an dem Windows-PC anmelde und das Testprogramm starte, funktioniert das Programm genau so wie es soll.

Das sieht für mich so aus, als ob ich automatisch von meiner Windows-Session angemeldet werde, liegt ja alles in der selben Domäne (?). Aber das kann es doch nicht sein!? Davor habe ich die ganze Zeit gegen einen virtuellen Exchange Server programmiert und da hat es augenscheinlich sehr gut funktioniert, und nun wollte ich das ganze Programm in die freie Wildbahn lassen und es geht nicht. Das bringt mich noch um den Verstand :D

Also im Endeffekt bleibt die Frage, wieso loggt mich Java (?) automatisch an einen Server an? Der Server, an den ich gehe, ist auch für Kerberos bzw. NTLM konfiguriert. Aber eben auch für Basic Authentication (=Benutzername/Passwort). Darum suche ich, eben die Einstellmöglichkeit für eine explizite Basic Authentication.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Javamail with authentication Netzwerkprogrammierung 9
P Basic Authentication Netzwerkprogrammierung 11
M HTTP HTTPClient Authentication - Quickr Server Netzwerkprogrammierung 8
TiME-SPLiNTER HTTP User Authentication: Java Client -> Webserver Netzwerkprogrammierung 7
G Server Client + Authentication Netzwerkprogrammierung 3
gieser HTTP SSL Client Authentication Netzwerkprogrammierung 1
KNeuhaus (Windows) Authentication VON einer Java-App aus. Netzwerkprogrammierung 2
A HTTP-Authentication Netzwerkprogrammierung 2
I Socket Problem mit den WebSocket Antworten der Discord API Netzwerkprogrammierung 0
K Java Websocketserver Problem | Android to Pi Netzwerkprogrammierung 1
C RMI Produzent-Verbraucher-Problem - Code review Netzwerkprogrammierung 12
B Socket Bilder verschicken via Sockets. Heap-Problem. Netzwerkprogrammierung 2
S Problem bei dem Bluetoothverbindungsaufbau Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
M Netty - TCP Problem Netzwerkprogrammierung 4
L Socket Problem mit Server Netzwerkprogrammierung 1
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
M Problem bei Socket (MultiplayerSpiel) Netzwerkprogrammierung 4
M Socket CDI, Websocket reference Problem ! Netzwerkprogrammierung 2
Shams Problem mit Eventbus in Verbindung mit Server Netzwerkprogrammierung 0
G apache httpClient Problem. Netzwerkprogrammierung 5
H Problem mit ObjectStreams Netzwerkprogrammierung 3
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
D Socket BufferedWriter/Reader Problem Netzwerkprogrammierung 1
Maxim6394 Problem mit Socks5 Implementierung Netzwerkprogrammierung 0
C Handle Connection Problem Netzwerkprogrammierung 3
E HttpUrlConnection Cookie Problem Netzwerkprogrammierung 0
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
O 4Gewinnt Multiplayer - Netzwerk Problem (TCP) Netzwerkprogrammierung 1
A Socket Socket-Problem - Object wird nicht übertragen Netzwerkprogrammierung 3
R Problem beim Programmieren eines Chatprogramms Netzwerkprogrammierung 5
E einfaches Problem: Session-Handling bei Servlets Netzwerkprogrammierung 5
G Problem mit einem FileWatcher Netzwerkprogrammierung 7
T Socket Server starten Thread Problem Netzwerkprogrammierung 12
B Client/Server Connection Problem Netzwerkprogrammierung 2
G Problem mit STATIC-Verständnis Netzwerkprogrammierung 8
S Umstellung AS400 auf Postgre - Problem beim Arbeiten mit Metadaten Netzwerkprogrammierung 2
J Facelets Include Rendered Problem Netzwerkprogrammierung 2
J Socket Problem mit C++/Java Netzwerkprogrammierung 20
P Problem mit Datagram-Sockets Netzwerkprogrammierung 2
G Socket NIO2 Problem mit AsynchronousSocketChannel beim Schließen Netzwerkprogrammierung 3
G Cookie Verwaltungs Problem nach Login auf InetSeite (Wo utma-Cookie?) Netzwerkprogrammierung 18
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 7
B Socket Problem mit Netzwerkchat Netzwerkprogrammierung 21
D RMI Problem beim shutdown von verteilter CORBA-Anwendung Netzwerkprogrammierung 6
Maxim6394 ipv6 Problem Netzwerkprogrammierung 2
Maxim6394 Proxyserver Performance Problem Netzwerkprogrammierung 11
M Problem Client - Server Sockets: .ready() wird nie true! Netzwerkprogrammierung 6
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 5
B RMI und Problem mit rmic-Tool Netzwerkprogrammierung 3
C FTP storeFileStream Problem Netzwerkprogrammierung 3
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
D JavaMail - Mailsabrufen Problem (imap) Netzwerkprogrammierung 12
J HTTP Übersetzung yahoo babelfish - Zeichensatz-Problem Netzwerkprogrammierung 6
D Apache CXF, JAX-WS Problem bei Arrays - einfacher Server Netzwerkprogrammierung 2
M Problem beim Datenempfang Netzwerkprogrammierung 2
X Problem mit Server-Client-Kommunikation Netzwerkprogrammierung 14
M Problem mit Socket-Verbindung Netzwerkprogrammierung 2
N NIO Problem beim speziellen Behandeln von einzelnen Benutzern Netzwerkprogrammierung 13
D Thread problem Netzwerkprogrammierung 3
T Servlets JSP: Tomcat Problem Netzwerkprogrammierung 4
K Client - Server Problem Netzwerkprogrammierung 16
T RMI Problem Client-Server Netzwerkprogrammierung 2
P RMI Stub Problem Netzwerkprogrammierung 3
D Socket UDP Übertragungs Problem Netzwerkprogrammierung 7
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 2
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 6
D Problem mit ObjectInputStreams Netzwerkprogrammierung 10
D Socket Problem mit InputStreamReader Netzwerkprogrammierung 3
N CRC32 CheckSum Problem bei UDP Netzwerkprogrammierung 2
V Java Mail Api - IMAP Problem Netzwerkprogrammierung 6
P RMI Problem Netzwerkprogrammierung 4
I Problem bei Outputstreamerzeugung in anderer Klasse als Socket Netzwerkprogrammierung 5
S Socket Problem mit Objektübertragung Netzwerkprogrammierung 16
Shoox Reader / Writer Problem Netzwerkprogrammierung 2
S Problem mit 2 Serversockets unter Win XP Netzwerkprogrammierung 7
P Socket Problem mit Netzwerkverbindung über TCP Netzwerkprogrammierung 12
M RMI - Connection Problem Netzwerkprogrammierung 7
J Socket Client - Server Problem Netzwerkprogrammierung 4
M Socket Chat-Client-Problem Netzwerkprogrammierung 8
D Client Server Problem, Methode readline() löst SocketException "Connection reset" aus Netzwerkprogrammierung 8
E HTTP Problem beim Auslesen von Websiten Netzwerkprogrammierung 6
T Problem bei Findung der richtigen Architektur Netzwerkprogrammierung 3
J Socket Problem -Proxies Netzwerkprogrammierung 2
R HTTP Problem bei Authentifizierung über (Http)UrlConnection Netzwerkprogrammierung 2
F Konzept Problem Netzwerkprogrammierung 12
G NIO Sockets Architektur Problem Netzwerkprogrammierung 2
H Neues NIO problem nachricht an alle clients Netzwerkprogrammierung 3
J Client server problem Netzwerkprogrammierung 3
S Problem bzgl. Sockets / Server-Client-Struktur Netzwerkprogrammierung 3
W RMI Problem Netzwerkprogrammierung 4
M Problem mit Server Netzwerkprogrammierung 5
N Socket Java server c# client problem Netzwerkprogrammierung 7
Y Problem mit ObjectInputStream beim lesen vom Socket Netzwerkprogrammierung 10
R RMI Hibernate Problem Netzwerkprogrammierung 4
Z RMI Problem Netzwerkprogrammierung 11
F RMI problem mit RMI Netzwerkprogrammierung 3
H Object Cast Problem nach Übertragung mit Log4j Netzwerkprogrammierung 5
H Log4j SocketAppender Problem Netzwerkprogrammierung 2
P HTTP Problem beim Download von einer Datei Netzwerkprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben