2012-09-04 33 views
5

Tôi muốn tiêu thụ .Net WS từ IBM WebSphere.Ứng dụng khách JAX-WS của IBM .Net WS với xác thực Active Directory (NTLM)

Tôi đã tạo WS-client với triển khai thực hiện JAX-WS của IBM để tiêu thụ .Net WS trên IIS. Các khách hàng là trên SUSE và xác thực là bởi NTLM với Windows Server 2003 Active Directory.

  • Nếu khách hàng được thực thi trong dòng lệnh thực hiện cuộc gọi java.net.Authenticator để nhận thông tin đăng nhập và yêu cầu thành công.

  • Nếu khách hàng được thực hiện bên trong RAD Authenticator không được gọi và nó không thành công với 401.

  • Nếu khách hàng được thực hiện bên trong WebSphere Authenticator không được gọi và nó không thành công với 401.

  • Nếu tôi tạo một HttpConnection trực tiếp đến URL .Net WS thì Authenticator được gọi và yêu cầu thành công.

  • Nếu thay vì JAX-WS Việc triển khai IBM, tôi sử dụng Axis2 (trực tiếp, không thực hiện JAX-WS của IBM Axis2) Tôi có thể chuyển cho đối tượng Authenticator của đối tượng Authenticator và yêu cầu thành công. Điều này chỉ hoạt động cho giao thức NTLM với Windows Server 2003. Khi chúng ta di chuyển sang Windows Server 2008, giao thức auth là NTLMv2 (mọi người chuyển sang NTLMv2 vì vấn đề bảo mật với NTLM) và yêu cầu không thành công vì NTLMv2 không được HTTP Client 3 hỗ trợ. X là phụ thuộc của Axis2. Và trong một thời gian họ sẽ không di cư.

Nếu tôi sử dụng tính năng triển khai JAX-WS khác tốt hơn IBM, tôi mất quyền quản lý bảng điều khiển và đọc chú thích tự động cùng với hỗ trợ rời khỏi IBM.

Câu hỏi

tôi không hiểu tại sao bên trong RAD nó, đã không hề làm việc, là cùng một chương trình làm việc từ dòng lệnh.

Làm thế nào để bạn thực hiện JAX-WS IBM thực hiện xác thực với hỗ trợ giao thức NTLMv2 với thông tin đăng nhập cụ thể? (java.net.Authenticator cung cấp cho bạn điều này, và nó sẽ được gọi là ... nó không)

Có cách nào để làm cho việc triển khai JAX-WS của IBM có thể sử dụng một ứng dụng khách HTTP khác không?

Ngay cả khi triển khai JVM của IBM cung cấp xác thực NTLM (đây là lý do tại sao dòng lệnh và lệnh thực thi HttpConnection trực tiếp hoạt động) nên tôi không hiểu tại sao họ không sử dụng nó cho ngăn xếp IBM WS.

điểm Thêm

Có cách nào tốt để cung cấp khả năng hai chiều để tiêu thụ WS với xác thực ActiveDirectory?

Comment

Xuân WS sử dụng HttpClient 4.X hỗ trợ NTLMv2 auth, nhưng tôi cần một việc thực hiện JAX-WS và nó nên là người của IBM. JAX-WS của IBM dường như chỉ hỗ trợ AUTH cơ bản. Tôi không hiểu làm thế nào mà Microsoft WS interop không quan trọng đối với IBM.

Tài liệu tham khảo

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

Cảm ơn trước!

Trả lời

2

Cuối cùng, Đây là những gì tôi đã làm.

Tôi tạo đối tượng JAXB bằng plugin RAD để tạo ứng dụng khách JAX-WS. Tôi sử dụng các DTO được tạo ra như các thông điệp mà tôi chuyển tới thư viện Spring WS. Spring WS 2.1 đi kèm với Http Client 4.2, hỗ trợ NTLMv2.

Tôi tạo ra một thư viện nhỏ để làm cho quá trình này dễ dàng hơn, nhưng ý tưởng thủ tục là:

  1. Tạo client JAX-WS với RAD
  2. Tạo một lớp mà thực hiện các giao diện dịch vụ được tạo ra bởi RAD
  3. Đối với mỗi phương thức giao diện:
  4. 3.1 Tiêm thông số phương pháp giao diện của đối tượng JAXB
  5. 3.2 đèo đối tượng này đến WebServiceTemplate (object Spring) cuộc gọi dịch vụ web.
  6. 3.3 Cast đáp ứng lời kêu gọi đối tượng JAXB phương pháp phản ứng
  7. 3.4 Return giá trị nội tại của đối tượng phản ứng

Vì vậy, những gì cuối cùng bạn cần làm là tái sử dụng các thế hệ đối tượng cho một khách hàng JAX-WS để bọc các tham số của phương thức dịch vụ vào đối tượng mà Spring WS cần thực hiện cuộc gọi.

Đối với bộ xác thực NTLM NTCredentials cho người gửi WebServiceTemplate.

Trục2 1.7 sẽ có hỗ trợ cho NTLMv2 với phiên bản cập nhật của HttpClient 4.2.X, nhưng chưa có ngày phát hành.

Xem:

  • WebServiceTemplate WS gọi

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

  • WebServiceTemplate gửi

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


Cập nhật: Tôi đã thử nghiệm Axis 1,7 và auth NTLM hoạt động tốt.

2

Bạn đang chuyển từ NTLM (1994?) Sang NTLMv2 (1999) thay vì công nghệ dựa trên Kerberos (được giới thiệu trong Windows 2000) vì NTLMv2 an toàn hơn ???

Về mặt interop với Microsoft, các hệ thống hiện đại sẽ sử dụng WS-Security Kerberos giữa máy khách JAX-WS và dịch vụ .NET. Điều này đã được thử nghiệm.

Những gì bạn đang cố gắng làm (thay thế Authenticator được sử dụng bởi quy trình) được áp dụng cho một ứng dụng Java độc lập, nhưng không phù hợp với mô hình Java Enterprise, nơi mà quá trình Java lưu trữ nhiều "ứng dụng" với riêng " xác thực "yêu cầu, không bao giờ nhớ các yêu cầu nội bộ áp đặt bởi các quá trình WebSphere Server nói chuyện với nhau (Máy chủ ứng dụng cho Máy chủ ứng dụng, Node Agent đến Máy chủ ứng dụng, Máy chủ ứng dụng đến LDAP, v.v.)

+1

Tôi không chọn để đi đến NTLMv2, công ty đi đến. WS-Security là một lớp trên giao thức truyền tải. NTLMv2 hoạt động trong lớp truyền tải nên tôi không thể đi với WS-Security. Kerberos là một lựa chọn tốt hơn so với NTLMv2 nhưng nó không cho phép tải cân bằng máng DNS vì có khả năng chống tấn công Man-In-The-Middle. Trong trường hợp này, IP mục tiêu có thể thay đổi. NTLMv2 an toàn, chúng tôi không cần Kerberos. Tôi đã thử nghiệm một số ngăn xếp WS (Axis2, IBM JAX-WS, Spring WS) với chiến lược Authenticator và tất cả chúng đều tránh được nó. Nhưng tài liệu Authenticator nói rằng bất kỳ truy cập mạng nào cũng nên tìm kiếm thông tin đăng nhập trong đó. –

+0

Giới thiệu về Authenticator. Tôi đã tạo ra một chương trình nhỏ đặt một Authenticator và gọi một WS. Nếu tôi chạy chương trình này bên trong RAD nó không thành công, nếu bạn chạy nó từ dòng lệnh, nó sẽ gọi Authenticator để nhận các thông tin xác thực và hoạt động tốt. Tôi không biết tại sao. –

Các vấn đề liên quan