2011-05-09 21 views
5

Windows'da çalışan bir Java 6 istemcisinin SPNEGO kimlik doğrulama protokolünü uygulayan bir Microsoft sunucusuna erişirken NTLM üzerinden kimlik doğrulaması yapıp yapamayacağını bilen var mı?HTTP Windows üzerinde bir Java SE6 istemcisinden NTLM aracılığıyla "Anlaşma" kimlik doğrulaması

Anlayışım, Windows üzerinde çalışan Java 6'nın SPNEGO için yerleşik desteğe sahip olması, ancak Java uygulamasının, kerberos kimlik doğrulaması mümkün olmadığında NTLM kimlik doğrulamasını denemesi olmadığı anlaşılıyor. görüş: Güneş docs sağlanan Authenticator örnek WWW-Authenticate gönderen sunucuya yanıt olarak bir 401 Yetkisiz hata ile başarısız olur. İşte

test ortamında tanımıdır:

Hedef Sunucu:

  • , Windows 2008 R2 tek başına sunucu
  • Microsoft SOAP hizmeti WCF
  • kullanılarak uygulanan (AD etki alanının parçası olmayan)
  • WCF, SPNEGO kimlik doğrulaması için yapılandırılmıştır (kerberos ve NTLM)
  • WCF sunucusu, reconfi olamaz diğer kimlik doğrulama modları :(desteklemek için gured

Müşteri Makinası:

  • Windows 7 64-bit bağımsız iş istasyonu (bir etki alanının parçası olmayan) Güneş SPNEGO örneğini çalıştıran
  • Java SE6 istemci

Nihai hedef, WCF sunucusunda SOAP servislerini çağırmak için Apache CXF 2.4.0 kullanmaktır. CXF ve SOAP'ın karmaşıklıklarını eklemeden önce, kimlik doğrulama sorunlarını çözmek için basit bir Java test uygulaması kullanarak WSDL'yi sunucudan almaya çalışıyorum.

FWIW - WCF sunucusuna Windows sunucusunun yerel Administrator oturum açma bilgilerini kullanarak IE'den erişebilirim. Ayrıca herhangi bir özel yetkilendirme yapılandırması olmadan bir Delphi XE SOAP istemcisi oluşturabildim. Delphi SOAP istemcisi, WinInet'i başlık altında kullanır.

+0

Sorununuzu çözdünüz mü? –

+1

@David Brossard - Evet, işleri hallettik. Çözümümüzle ilgili uyarı, bir hizmet hesabı kullanılmadığı sürece Windows hizmet olarak çalışırken yerel Java auth işlevselliğinin sorun yaşadığıydı. Daha yakın zamanda, NTLMv2 auth desteğini çalıştıran Apache HTTP istemcisini kullanmaya başladık. Çalışmak için biraz incelik aldı, ancak yoğun üretimde güvenilir olduğunu kanıtladı. –

+0

Teşekkürler! O zaman Apache müşterisine bakacağım. Benim tomcat windows hizmeti olarak çalışıyor yani iyi –

cevap

2

Java'nın SPNEGO'su yalnızca Kerberos'u kullanabilir, çünkü NTLM tescilli bir eski MS teknolojisidir. Hedef makineniz bir alanın parçası değilse, durumunuzda olduğu gibi, şansınız kalmaz. Yapabiliyorsanız DIGEST-MD5 kimlik doğrulamasına geçmelisiniz.

+0

Cevabınız için teşekkürler. Benzer bir sonuca vardım - Java'nın SPNEGO uygulaması NTLM için destek sağlamaz. Bununla birlikte, Java, NTLM/NTMLv2'yi en azından Windows platformunda bazı küçük uyarılar ile destekliyor. Diğer platformlar için MS lisans sorunları olduğuna inanıyorum. Şu anda Dynamics Nav 2009 R2'ye (WCF tabanlı bir sunucu) karşı NTLMv2'yi güvenilir bir şekilde çalıştıran bir CXF istemcisine sahibim.Önerdiğiniz gibi sindirim auth tercih ederim, ancak MS Nav geliştiricileri sadece SPENEGO ve NTLMv2 desteği uyguladı: (NTLM desteği sadece 2009 R2'de eklendi. –

+0

Yanlış yazdınız mı? NTLM (v2) için doğrudan Java desteği yok Üçüncü taraf libs kullanmıyorsanız, Windows –

+1

Hayır, yazdığım doğrudur: "Java'nın SPNEGO uygulaması NTLM için destek sağlamaz." Windows üzerinde Java, standart MS NTLMv2 kimlik doğrulamasını destekler, ancak Java SPENGO uygulaması yalnızca Kerberos'u destekler. Sunucu, SPENGO kullanıyorsa (örneğin WWW-Authenticate: Negotiate) –