2012-09-04 8 views
5

Chcę pobrać. Net WS z IBM WebSphere.JAX-WS Klient IBM zużywający .Net WS z uwierzytelnianiem Active Directory (NTLM).

Utworzono klienta WS z implementacją IBM JAX-WS, która zużywa .Net WS na IIS. Klient jest w systemie SUSE, a uwierzytelnianie odbywa się za pomocą NTLM z usługą Active Directory systemu Windows Server 2003.

  • Jeśli klient jest wykonywane w wierszu poleceń realizacja wymaga java.net.Authenticator uzyskać poświadczenia, a wniosek jest udany.

  • Jeśli klient jest wykonywany wewnątrz RAD podmiot uwierzytelniający nie zadzwonił i nie jest on z 401.

  • Jeśli klient jest wykonywany wewnątrz WebSphere podmiot uwierzytelniający nie zadzwonił i nie jest on z 401.

  • Jeśli utworzę HttpConnection bezpośrednio do adresu URL .Net WS, zostanie wywołany uwierzytelnianie i żądanie zakończy się powodzeniem.

  • Jeśli zamiast implementacji IBM JAX-WS używam Axis2 (bezpośrednio, a nie implementacji IBM Axis2 JAX-WS), mogę przekazać do klienta Axis2 obiekt Authenticator, a żądanie jest skuteczne. Działa to tylko w przypadku protokołu NTLM z systemem Windows Server 2003. Po migracji do systemu Windows Server 2008 protokółem uwierzytelniania jest NTLMv2 (wszyscy przechodzą na NTLMv2, ponieważ problemy z zabezpieczeniami w NTLM) i żądanie nie powiedzie się, ponieważ NTLMv2 nie jest obsługiwany przez klienta HTTP 3. X jest zależnością Axis2. I przez jakiś czas nie zamierzają migrować.

Jeśli użyję innej implementacji JAX-WS niż IBM, stracę konsolę i automatyczny odczyt adnotacji, a także stracę wsparcie IBM.

Pytania

I nie będziesz dlaczego wewnątrz RAD się nie zdarzyło pracę, to ten sam program, który działa z linii poleceń.

W jaki sposób wprowadza się uwierzytelnianie implementacji JAX-WS IBM z obsługą protokołu NTLMv2 z określonymi poświadczeniami? (java.net.Authenticator zapewnia to, i powinno się nazywać ... nie)

Czy jest jakikolwiek sposób uczynienia impeementacji IBM JAX-WS do korzystania z innego klienta HTTP niż standardowy?

Nawet implementacja IBM JVM zapewnia autoryzację NTLM (jest to powód, dla którego działa linia poleceń i bezpośrednie wykonywanie HttpConnection), więc nie rozumiem dlaczego nie używają go dla stosu IBM WS.

punkty Plus

Czy istnieje dobry sposób, aby zapewnić dwukierunkową zdolność do konsumpcji WS z uwierzytelnianiem ActiveDirectory?

Komentarz

Wiosna WS wykorzystuje httpclient 4.X, który obsługuje uwierzytelniania NTLMv2, ale muszę wdrażania JAX-WS i powinien być jeden IBM. IBM JAX-WS tylko wydaje się obsługiwać Basic AUTH. Nie rozumiem, jak współpraca między Microsoft WS nie jest ważna dla IBM.

Referencje

Authenticator conf:

http://docs.oracle.com/javase/6/docs/api/java/net/Authenticator.html#setDefault%28java.net.Authenticator%29

https://stackoverflow.com/a/5994706/14811

Dzięki z góry!

Odpowiedz

2

Wreszcie, to właśnie zrobiłem.

Tworzę obiekty JAXB z wtyczką RAD, aby utworzyć klienta JAX-WS. Używam wygenerowanych DTO jako wiadomości, które przekazuję do biblioteki Spring WS. Spring WS 2.1 zawiera klienta Http 4.2, który obsługuje NTLMv2.

stworzyłem małą bibliotekę, aby ułatwić ten proces, ale pomysł procedura jest:

  1. Generowanie klienta JAX-WS z RAD
  2. Tworzenie klasy, która implementuje interfejs usługi generowane przez RAD
  3. dla każdej metody interface
  4. 3,1 wstrzykiwać parametry metody interfejsu do obiektu JAXB
  5. 3,2 przekazać ten obiekt do WebServiceTemplate (sprężyna) obiektu wywołanie usługi internetowej.
  6. 3.3 Obsada odpowiedź wezwanie do obiektu metoda JAXB odpowiedzi
  7. 3.4 zwróci wartość wewnętrzna obiektu odpowiedzi

tak, to co w końcu zrobić, to ponowne generowanie obiektów dla klienta JAX-WS zawiń parametry metody usługi do obiektu, który Spring WS musi wykonać.

Dla zestawu uwierzytelniającego NTLM NTCredentials dla nadawcy WebServiceTemplate.

Axis2 1,7 będzie mieć poparcie dla NTLMv2 z zaktualizowanej wersji httpclient 4.2.X, ale nie ma jeszcze daty premiery.

Patrz:

  • WebServiceTemplate WS zadzwonić

http://static.springsource.org/spring-ws/sites/2.0/apidocs/org/springframework/ws/client/core/WebServiceTemplate.html#marshalSendAndReceive%28java.lang.Object%29

  • WebServiceTemplate nadawca

http://static.springsource.org/spring-ws/sites/2.0/apidocs/org/springframework/ws/client/support/WebServiceAccessor.html#getMessageSenders%28%29

  • NTCredentials

http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/auth/NTCredentials.html


Aktualizacja: Przetestowałem Axis 1.7 i NTLM auth działa dobrze.

2

Przeprowadzasz się z NTLM (1994?) Do NTLMv2 (1999) zamiast technologii opartej na protokole Kerberos (wprowadzonej w Windows 2000), ponieważ NTLMv2 jest bezpieczniejszy ???

Jeśli chodzi o współpracę z firmą Microsoft, nowoczesne systemy korzystałyby z protokołu WS-Security Kerberos między klientem JAX-WS i usługą .NET. To zostało przetestowane.

Co próbujesz zrobić (zastąpić Authenticator używany przez proces) ma zastosowanie do autonomicznej aplikacji Java, ale nie pasuje do modelu Java Enterprise, w którym proces Java obsługuje wiele "aplikacji", każda z własną " wymagania dotyczące uwierzytelniania, nie biorąc pod uwagę wewnętrznych wymagań narzuconych przez procesy serwera WebSphere, które komunikują się ze sobą (serwer aplikacji do serwera aplikacji, agent węzła do serwera aplikacji, serwer aplikacji do LDAP itp.).

+1

Nie wybieram do NTLMv2, do którego firma się udaje. WS-Security jest warstwą nad protokołem transportowym. NTLMv2 działa w warstwie transportowej, więc nie mogę korzystać z WS-Security. Kerberos jest lepszym wyborem niż NTLMv2, ale nie pozwala na równoważenie obciążenia przez DNS, ponieważ jest odporny na atak Man-In-the-Middle. W tym przypadku docelowy adres IP może się zmienić. NTLMv2 jest bezpieczny, nie potrzebujemy Kerberos. Przetestowałem kilka stosów WS (Axis2, IBM JAX-WS, Spring WS) ze strategią Authenticator i wszyscy tego unikali. Ale dokument Authenticator mówi, że każdy dostęp do sieci powinien szukać poświadczeń. –

+0

O Authenticator. Stworzyłem mały program, który ustawia Authenticator i wywołuje WS. Jeśli uruchomię ten program wewnątrz RAD, zawiedzie, jeśli uruchomisz go z wiersza poleceń, wywoła Authenticator, aby uzyskać referencje i działa dobrze. Nie wiem dlaczego. –

Powiązane problemy