2012-09-04 100 views
5

我想從IBM WebSphere中使用.Net WS。JAX-WS使用Active Directory驗證的IBM客戶端.Net WS(NTLM)

我創建了一個帶有JAX-WS IBM實現的WS客戶端,它在IIS上使用.Net WS。客戶端位於SUSE上,身份驗證通過NTLM與Windows Server 2003 Active Directory進行。

  • 如果客戶端在命令行中執行,則實現調用java.net.Authenticator來獲取憑證,並且請求成功。

  • 如果客戶端內RAD執行認證符不叫,也未能與401

  • 如果客戶端在WebSphere執行認證符不調用,它失敗,401

  • 如果我直接向.Net WS URL創建HttpConnection,則調用Authenticator,並且請求成功。

  • 如果不是使用JAX-WS IBM實現,而是使用Axis2(直接而不是IBM Axis2 JAX-WS實現),那麼我可以向Axis2客戶端傳遞Authenticator對象,並且請求成功。這僅適用於Windows Server 2003的NTLM協議。遷移到Windows Server 2008時,身份驗證協議爲NTLMv2(由於NTLM的安全問題,每個人都轉移到NTLMv2),並且請求失敗,因爲HTTP客戶端3不支持NTLMv2。 X是Axis2的依賴關係。而且有一段時間他們不會遷移。

如果我使用IBM以外的JAX-WS的其他實現,我會鬆開控制檯管理和自動註釋讀取,再加上放棄IBM的支持。

問題

我不知道爲什麼RAD的裏面didn't工作,是由命令行的工作原理相同的程序。

如何讓JAX-WS IBM實現通過具有特定憑證的NTLMv2協議支持進行身份驗證? (java.net.Authenticator爲您提供這一點,它應該被稱爲...它不)

是否有任何方式使IBM JAX-WS實現使用另一個HTTP客戶端比標準的?

即使IBM JVM實現提供NTLM身份驗證(這就是爲什麼命令行和直接HttpConnection執行起作用的原因),所以我不明白他們爲什麼不將它用於IBM WS堆棧。

加點

是否有提供消費與ActiveDirectory的認證WS雙向能力沒有什麼好的辦法?

評論

春WS使用HttpClient的4.X支持NTLMv2的權威性,但我需要一個JAX-WS的實現,它應該是IBM之一。 IBM JAX-WS似乎只支持Basic AUTH。我不明白Microsoft WS互操作性對於IBM而言並不重要。

參考

身份驗證的conf:

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

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

提前感謝!

回答

2

最後,這就是我所做的。

我創建JAXB與RAD插件創建一個JAX-WS客戶對象。我使用生成的DTO作爲傳遞給Spring WS庫的消息。 Spring WS 2.1帶有支持NTLMv2的Http Client 4.2。

我創建了一個小型圖書館,使這個過程更容易,但程序的想法是:

  1. 生成JAX-WS客戶端與RAD
  2. 創建實現由RAD
  3. 生成的服務接口的類
  4. 對於每個接口方法:
  5. 3.1注入接口方法的參數到JAXB對象
  6. 3.2通行證此對象到WebServiceTemplate(春季對象)網絡服務電話。
  7. 3.3演員的呼叫響應到JAXB方法響應對象
  8. 3.4返回響應對象

這樣的內在價值,你最終做的是重新使用對象生成的JAX-WS客戶端將服務方法的參數包裝到Spring WS需要調用的對象中。

對於NTLM身份驗證設置NTCredentialsWebServiceTemplate發件人。

Axis2 1.7將支持NTLMv2與更新版本的HttpClient 4.2.X,但沒有發佈日期。

參見:

  • WebServiceTemplate WS叫

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

  • WebServiceTemplate發件人

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


更新:我測試軸1.7和NTLM身份驗證效果很好。

2

您從NTLM(1994?)移動到NTLMv2的(1999年),而不是基於Kerberos技術(在Windows 2000中引入的),因爲NTLMv2的是更安全???

在與微軟的互操作方面,現代系統將使用WS-Security的Kerberos的JAX-WS客戶端和.NET服務之間。這已經過測試。

您正在嘗試執行的操作(替換進程使用的Authenticator)適用於獨立Java應用程序,但不適用於Java Enterprise模型,其中Java進程託管多個「應用程序」,每個應用程序都有自己的「認證」的要求,別提由WebSphere Server進程互相交談施加的內在要求(應用服務器到應用服務器,節點代理,以應用服務器,應用服務器到LDAP等....)

+1

我不選擇去NTLMv2公司去。 WS-Security是傳輸協議上的一層。 NTLMv2在傳輸層工作,所以我無法使用WS-Security。 Kerberos是比NTLMv2更好的選擇,但它不允許通過DNS進行負載平衡,因爲它抵抗Man-In-The-Middle攻擊。在這種情況下,目標IP可能會發生變化。 NTLMv2是安全的,我們不需要Kerberos。 我使用Authenticator策略測試了一些WS堆棧(Axis2,IBM JAX-WS,Spring WS),所有這些都避免了它。但Authenticator doc說任何網絡訪問都應該在其中查找憑證。 –

+0

關於Authenticator。我創建了一個設置Authenticator並調用WS的小程序。如果我在RAD內部運行這個程序,它會失敗,如果你從命令行運行它,它會調用Authenticator來獲取憑證並且工作正常。我不知道爲什麼。 –

相關問題