IIS 7.5'te Windows Kimlik Doğrulama sorunlarını giderme (sorun yok)?


21

Entegre Windows Kimlik Doğrulaması'nı IIS ile çalışmak konusunda sorun yaşayan binlerce raporun olduğunu biliyorum, ancak hepsi uygulamayan web sayfalarına veya daha önce denediğim çözümlere yol açıyor gibi görünüyor. Daha önce bunun gibi düzinelerce site dağıtmıştım, yani sunucu / konfigürasyonla ilgili tuhaf bir şey var ya da çok uzun zamandır bu konuya bakıyorum ve bariz bir şey görmüyorum.

Basitçe söylemek gerekirse, yerel makinemde her şey mükemmel çalışıyor, ancak söyleyebileceğim kadarıyla aynı yapılandırmaya sahip olan üretim sunucusunda ayrılıyor .

Yerel makinede:

  • Makine, Windows 7 Ultimate, Service Pack 1, IIS 7.5 ile çalışıyor.
  • Site, hem IIS hem de VS Web Geliştirme Sunucusu kullanılarak başarıyla test edilmiştir.
  • IIS site config, Windows Kimlik Doğrulama dışında tüm kimlik doğrulama yöntemlerini devre dışı bıraktı.
  • Yerel makine herhangi bir etki alanında değil.
  • Sağlanan Tedarikçiler Müzakere ve NTLM'dir (Müzakere değil: Kerberos).
  • Genişletilmiş Koruma Kapalı.
  • Test edilen tüm tarayıcılar (IE, Firefox, Chrome) zorlu komut istemini gösterir ve (yerel) Windows hesabımla localhost etki alanına giriş yapmama izin verir .
  • Test edilen tüm tarayıcılar ayrıca opak bir yerel IP adresi kullanarak da çalışır; bu nedenle tarayıcıların kendileri sitenin "yerel" veya "uzak" görünüp görünmediğini önemsemez.
  • Şu anda oturum açan kullanıcıyı gösteren web sayfasına bir ekran satırı ekledim ve tam olarak ne beklediğimi gösterir (hangi yerel kullanıcı ile giriş yapmış olursam).

Uzak makinede:

  • Sunucu, Windows Server 2008 R2, IIS 7.5 kullanıyor.
  • Web sayfasını yüklemek derhal bir 401.2 hatasıyla sonuçlanır : Geçersiz doğrulama başlıkları nedeniyle bu sayfayı görme yetkiniz yok. Hiçbir meydan okuma mesajı görünmez.
  • IIS site config, Windows Kimlik Doğrulama dışında tüm kimlik doğrulama yöntemlerini devre dışı bıraktı.
  • Uzak makine herhangi bir etki alanında değil.
  • Sağlanan Tedarikçiler Müzakere ve NTLM'dir (Müzakere değil: Kerberos).
  • Genişletilmiş Koruma Kapalı.
  • Uzak makinede (uzak masaüstü oturumu), aynı hata, etki alanının localhost veya harici IP adresi olmasına bakılmaksızın Internet Explorer'da görünür .
  • Uzak web sitesini yerel makinemden görüntülemeye çalışırsam , hata yine de 401, ancak biraz farklı bir 401'dir. Metinle birlikte alt kod yok: Geçersiz kimlik bilgileri nedeniyle erişim reddedildi.
  • Windows Kimlik IIS rolü özelliği olan yüklü.
  • WindowsAuthentication modülü olan (sunucu düzeyinde) ilave edildi.
  • Windows Kimlik Doğrulamasını kapatıp Temel Kimlik Doğrulamayı etkinleştirirsem de aynı hata oluşur.
  • Site yapar Windows kimlik doğrulaması kapatıp Anonymous (besbelli) etkinleştirirseniz yükü.
  • Microsoft Destek'teki tüm sorun giderme adımlarını zaten izledim: IIS'de HTTP 401 hatalarında sorun giderme
  • Başka bir Microsoft destek sayfasında gösterilen geçici çözümü denedim (sözde NTLM'yi tek yöntem olarak zorlamak için).

Son fakat en az değil, 401.2 hataları için FREB'i açmaya çalıştım ve sonuçlar bana yararlı bir şey söylemedi, tek gördüğüm şu uyarı:

MODULE_SET_RESPONSE_ERROR_STATUS

ModülAdı IIS Web Çekirdeği
Bildirimi 2
HttpStatus 401 HttpReason
Yetkisiz
HttpSubStatus 2
ErrorCode
2147942405 ConfigExceptionInfo
Bildirimi AUTHENTICATE_REQUEST
ErrorCode Erişimi reddedildi. (0x80070005)

... bu bana zaten bildiklerimi söylüyor gibi görünüyor (bu sadece kimlik bilgilerini pazarlık etmek yerine isteği reddediyor).

İzleme, WindowsAuthentication modülünün doğru bir şekilde yüklendiğini gösteriyor; çünkü = NOTIFY_MODULE_STARTile bir satır varModuleNameWindowsAuthentication (- [un] neyse, hiçbir ilginç hata veya uyarı burada ve diğer çeşitli ASP.NET takip olaylar).

Biri bana burada ne kaçırdığımı söyleyebilir mi?


Hızlı güncelleme:

IP'leri, URL'leri ve diğer şeyleri göstereceği için bütün bir Wireshark dökümü göndermekten biraz rahatsızlık duyuyorum, ancak Fiddler'daki localhost ve uzak sunucudan gelen HTTP yanıtlarını yan yana karşılaştırdım ve oldukça kendiliğinden görünüyor. - sorunun ne olduğu belliydi:

localhost:

HTTP / 1.1 401 Yetkisiz
Önbellek Kontrolü: özel
İçerik Türü: text / html; karakter kümesi = UTF-8
Sunucu: Microsoft-IIS / 7.5
WWW-Kimlik doğrulaması: Pazarlık
WWW-Kimlik Doğrulama: NTLM
X-Powered-By: ASP.NET
Tarih: Cts, 17 Ara 2011 23:42:34 GMT
İçerik Uzunluğu: 6399
Proxy Desteği: Oturuma Dayalı Kimlik Doğrulama

Uzak:

HTTP / 1.1 401 Yetkisiz
İçerik Türü: metin / html
Sunucu: Microsoft-IIS / 7.5
X-Powered-By: ASP.NET
Tarih: Cts, 17 Ara 2011 23:43:13 GMT
İçerik Uzunluğu: 1293

Önbellek kontrolü gibi görünüşte önemsiz birkaç farkın yanı sıra, ana fark, uzak sunucunun WWW-Authenticate başlıklarını istemciye geri göndermemesidir.

Bu nedenle, soruyu aşağıya daraltıyor sanırım: Windows Kimlik Doğrulaması yüklendiğinde, yüklendiğinde ve yalnızca etkin olduğunda IIS neden WWW-Kimlik Doğrulaması başlıkları göndermiyor?


Kimlik doğrulama girişiminin düz metin bir telgrafını yakalamaya dikkat edin (önce şifrenizi atılacak bir şey olarak değiştirin - gerçek parolanızı ağda istemiyoruz). Bir 18 ay kadar önce bir Windows yaması, bir üreticinin uygulamasını havaya uçuran ve analiz etmeyi kabul ettiğimden daha fazla tecrübe kazandıran HTTP NTLM müzakeresinde bazı değişiklikler yaptı (bu arada, sistemler tamamen kaldırıldı mı?). müzakere konuşmaları.
Shane Madden

@ShaneMadden: Açıklayacağım çeşitli bilgi parçalarını hesaba katarım, ancak hemen hemen aynı olması gereken bir Fiddler oturumu yapabilirim ve sonra en azından IP'leri ve benzerlerini anonimleştirebilirim - ve Aslında ben zaten yaptım, sonuçlar oldukça açıklayıcı olmalı (sunucu herhangi bir şey istemediği için müşteri kimlik bilgileri istemini göstermiyor).
Aaron,

Oh, ilginç, biri bu sorunu Stack Overflow'ta da rapor etmiş görünüyor - ne yazık ki orada cevap yok.
Aaron

@Aaronaught Burada daha fazla farklı bir kullanıcı adı aldın mı? Bu soruyu ilk gördüğümde, sizi kandıran birinin olduğunu düşündüm.
Ward - Eski Monica

@Ward: Herhangi biri kullanıcı adını düzenleyebilir, bu profilin bir parçasıdır. Bu benim orijinal olanımdı, sadece teknoloji dışı sitelerdeki diğerlerini kullandım.
Aaron,

Yanıtlar:


14

Sorun çözüldü. Sonunda modül listesini yan yana karşılaştırmaya karar verdim ve aslında bir tane eksikti. İki Windows Kimlik Doğrulama modülü olduğu ortaya çıktı :

Modül Listesi

Sunucuda, yönetilen WindowsAuthenticationmodül oradaydı ancak WindowsAuthenticationModuleyukarıda belirtilen ana dilleri yoktu . Neden bu şekilde yapılandırıldığını herkesin tahmin etmesi gerekiyor, ancak görünüşe göre eğer yerel modül yüklenmemişse, yönetilen modül neşeyle yüklenecek ve sessizce arıza yapacak.

Bu nedenle, bu sorunla karşılaşacak gelecekteki okuyucular için her iki modülün de yüklü olduğundan emin olun , çünkü bunlardan biri eksikse IIS sizi uyarmaz.


Yönetilen WindowsAuthentication modülü, göründüğü gibi değildir. ASP.Net'teki Windows kimliklerini destekler ve her zaman yüklüdür (ASP.Net yüklendiğinde). Ancak, Windows Kimlik Doğrulama yerel modülü, Sunucu Yöneticisi'ndeki Windows Auth bileşenini işaretlediğinizde yüklü olan şeydir ve bu kimlik doğrulama seçeneğinin Kimlik Doğrulama GUI'sinde görünür olması için ihtiyacınız olan şey budur.
TristanK

@TristanK: Bu durumda, bu bileşen işaretlendi, ancak modül kurulmadı. (Ancak, Seçenek Kimlik Doğrulaması GUI'sinde görünürdü - bu yüzden ekranın yerel
modele

Konfigürasyon dosyalarına yapılan müdahalelerden dolayı bu şekilde kazanılmış olabileceğini düşünüyorum (muhtemelen ApplicationHost.config). Ama sanırım her şeyi nasıl mahvettiği önemli değil; o yaptı.
Aaron,

Açıkçası. Kırmak için bir şey olmadıkça Windows Auth çalışmıyor. Bu durumda, soru yapılandırmanın aynı olduğunu belirtirken, bu doğru değildir; bu yüzden aynı işe yaramadı. QED.
TristanK

1
Bu eksik modül sorunu sadece Windows Server 2012 R2'de beni ısırdı. Bu durum ortaya çıktığında herhangi bir belirti olmaması inanılmaz. Neyse, bu cevap için çok teşekkürler; Kelimenin tam anlamıyla saçımı yırtıyordum!
Rob Davis

4

Bunun, Windows Kimlik Doğrulaması altında çalışan ASP.NET sitelerinde yerel olarak çalışan geliştiriciler için sorunu çözmediğini tespit ettik. Geridöngü denetimini devre dışı bırakan bir kayıt defteri kesmesi bulduk; bu düzeltti: -

kayıt defteri anahtarı - HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa

"DisableLoopbackCheck" adlı 1 değeri ile bir DWORD oluşturun.

Ayarın etkili olması için makineyi yeniden başlatmanız gerekecek


DisableLoopbackCheck 1 ile 0 arasında geçiş yapabileceğimi ve değişikliğin hemen etkili olacağını gördüm. Ek olarak, olay günlüğünde Olay Kimliği 4625'i görebilirsiniz "Hesap oturum açılamadı" mesajı içeren güvenlik günlüğü.
alastairtree

Teşekkür ederim! IIS kimlik doğrulaması ve .Net sürümleri ile ilgili 2 gün süren hatalar, yalnızca bir sitenin geçişini test ederken, sahte bir DNS girişi oluşturmak için hosts dosyamı kullandığım için bunu bulmak içindi.
JohnLBevan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.