VS2013'te hata ayıklarken kimlik doğrulama sorunu - iis express


103

Visual Studio 2013'te hata ayıklarken windows kullanıcı adını almaya çalışıyorum. Sadece kullanıyorum:

httpcontext.current.user.identity.name

Bunu Dev Sunucumda çalıştırırsam iyi çalışıyor, herhangi bir önceki Visual Studio sürümünde hata ayıklama modunda çalıştırırsam da iyi çalışıyor.

Sorunlarım - Bunu visual studio 2013'te çalıştırırsam boş bir dizge alıyorum.

Web yapılandırmam aşağıdaki gibidir.

<system.web>
    <authentication mode="Windows"/>
    <identity impersonate="false"/>
    <authorization>
       <allow users="*"/>
    </authorization>
    <compilation debug="true" strict="false" explicit="true" targetFramework="4.0"/>
    <customErrors mode="Off"/>
</system.web>

Yanıtlar:


215

VS 2012'den VS 2013'e yeni yükselttim ve mevcut kullanıcı kimliği (HttpContext.User.Identity) anonim olarak geliyordu.

IIS express applicationhost.config'i değiştirmeyi denedim, fark yok.

Çözüm, web projesinin özelliklerine bakmak, projenin en üst seviyesini seçtiğinizde proje özelliklerini almak için F4'e basmaktı. Projeye sağ tıklayıp özellikleri seçmeyin, bu tamamen farklı bir şey.

Anonim Kimlik Doğrulamayı Devre Dışı ve Windows Kimlik Doğrulamasını Etkin olacak şekilde değiştirin.

Sos gibi çalışır :)


10
Bunun için teşekkürler. Bunu bir 'geliştirme' olarak eklediklerine inanamıyorum. Web.config bunun için. Artık web.config'de gördüğümüze güvenemiyoruz. Parlak.
trucker_jim

4
IIS Express üzerinde çalışan diğer uygulamaları etkilemeyeceği için bunun kabul edilen cevaptan daha iyi bir yaklaşım olduğuna inanıyorum.
niaher

Çok teşekkürler. Bu benim için de yaptı! Visual Studio 2013'e yükselttiğim bir Visual Studio 2008 Projesiydi.
Rob K.

VS 2012'de "Visual Studio Geliştirme Sunucusunu Kullan" kullandım. Yani bir yükseltme ve bu işe yaradı. Şimdi IIS Express çalıştırsa bile.
Thomas Koelle

VS 2013'e yeni yükselttiyseniz, bu kabul edilen cevap olmalıdır.
Nishant

130

Bunu araştırırken cevabımı buldum, ancak cevabı internette bulamadığım için bunu paylaşayım dedim:

Applicationhost.config dosyamı değiştirerek sorunumu çözdüm. Dosyam "\ Belgelerim \ IISExpress \ config" klasörüne kaydedildi.

Görünüşe göre VS2013 web.config dosyamı yok sayıyor ve farklı kimlik doğrulama yöntemleri uyguluyor.

Dosyanın bu kısmını aşağıdaki gibi görünecek şekilde değiştirmem gerekti. Gerçekte, anonymousAuthentication'ı yalnızca false ve windowsAuthentication modunu true olarak değiştirdim.

<authentication>

  <anonymousAuthentication enabled="false" userName="" />

  <basicAuthentication enabled="false" />

  <clientCertificateMappingAuthentication enabled="false" />

  <digestAuthentication enabled="false" />

  <iisClientCertificateMappingAuthentication enabled="false">
  </iisClientCertificateMappingAuthentication>

  <windowsAuthentication enabled="true">
    <providers>
      <add value="Negotiate" />
      <add value="NTLM" />
    </providers>
  </windowsAuthentication>

</authentication>

2
Güvenilir bir şekilde çalışmak için VS2013'te IIS Express kullanarak hata ayıklamak için bunu yapmak zorunda kaldım. Bu olmadan, bir kez iyi çalışıyor gibiydi, ardından 401 sonra. (1) applicationhost.config dosyasını değiştirecek bir AppCmd ​​komutu var mı ve (2), Web Projesindeki F4, Anonim Kimlik Doğrulamayı kapatmama ve Windows Kimlik Doğrulamasını açmama izin veriyor. Bunu VS2012'de yapmak iyi çalıştı, VS2013'te 401 ücretsiz geliştirme ortamı üretmiyor.
IanT8

4
@Neil, günümü kurtardın. BTW: Kapatmak gerekli değildir anonymousAuthentication. Açmak yeterlidir windowsAuthentication. Bu ayarlar, web sitelerinin kullanmasına izin verilen kimlik doğrulama mekanizmalarını kontrol eder.
chiccodoro

+1 de ... bu dırdır sorununu bir süredir yerel IISExpress isntance ile çözmeye çalışıyorum
Jeff Lewis

Ah, işte böyle yapılır. Dahi. Bu ipucu için teşekkürler, gerçekten faydalı!
Mike Gledhill

1
401 almadan bir web hizmeti çağrısını (WSE3 ile) test edebilmek için "Pazarlık" seçeneğini kaldırmak zorunda kaldım.
Wolf5

41

Visual Studio 2013 VE VS15'te (ancak diğer tüm sürümler için aynıysa sanırım) sadece F4'e basın ve bu iki özelliği değiştirin: - Anonim Kimlik Doğrulama: Devre Dışı Bırak - Windows Kimlik Doğrulaması: Etkinleştir


1
Bunun için teşekkürler. Bunu bir 'geliştirme' olarak eklediklerine inanamıyorum. Web.config bunun için. Artık web.config'de gördüğümüze güvenemiyoruz. Parlak.
trucker_jim

1
Beni Visual Studio 2010'a geri dönüşten kurtardınız!
Julien P

2
Bunun, IIS ayarları hakkında konuşmaya devam eden tüm bu SO gönderilerinden 1 numaralı soru / yanıt olmadığına inanamıyorum
kayboldu

38

Özellikler penceresini görüntülemek ve Anonim erişimi devre dışı bırakmak ve "Windows kimlik doğrulamasını" etkinleştirmek için projenizdeki VS2013 F4'te

O zaman işe yarayacak. Başka bir şeyi değiştirmeye gerek yok


Sinir bozucu bir şekilde, bu seçenek bir web projesinde hata ayıklamak istediğinizde mevcuttur, ancak Hizmet projeleri için mevcut değildir. Grrrr ...
Mike Gledhill

9

VS 2015 bunu değiştirir. Web projeme bir .vs klasörü ekledi ve applicationhost.config oradaydı. Önerilen değişiklikleri yaptım (pencere kimlik doğrulaması = true, anon = false) ve boş yerine bir kullanıcı adı vermeye başladı.


8

C: \ Users [kullanıcı kimliği] \ Documents \ IISExpress \ config klasöründe bulunan applicationHost.config dosyasını açın. Bu dosyanın içinde anonymousAthentication'ın overrideModeDefault'unu ve windowsAuthentication'ı "İzin Ver" olarak değiştirin

 <sectionGroup name="security">
                <section name="access" overrideModeDefault="Deny" />
                <section name="applicationDependencies" overrideModeDefault="Deny" />
                <sectionGroup name="authentication">
                    <section name="anonymousAuthentication" overrideModeDefault="Allow" />
                    <section name="basicAuthentication" overrideModeDefault="Deny" />
                    <section name="clientCertificateMappingAuthentication" overrideModeDefault="Deny" />
                    <section name="digestAuthentication" overrideModeDefault="Deny" />
                    <section name="iisClientCertificateMappingAuthentication" overrideModeDefault="Deny" />
                    <section name="windowsAuthentication" overrideModeDefault="Allow" />
                </sectionGroup>

Daha sonra, AnonymousAuthenticationModule ve WindowsAuthenticationModule için lockItem öğesini "false" olarak değiştirin

  <system.webServer>
            <modules>
                <!--
                <add name="HttpCacheModule" lockItem="true" />
-->
                <add name="DynamicCompressionModule" lockItem="true" />
                <add name="StaticCompressionModule" lockItem="true" />
                <add name="DefaultDocumentModule" lockItem="true" />
                <add name="DirectoryListingModule" lockItem="true" />
                <add name="IsapiFilterModule" lockItem="true" />
                <add name="ProtocolSupportModule" lockItem="true" />
                <add name="HttpRedirectionModule" lockItem="true" />
                <add name="ServerSideIncludeModule" lockItem="true" />
                <add name="StaticFileModule" lockItem="true" />
                <add name="AnonymousAuthenticationModule" lockItem="false" />
                <add name="CertificateMappingAuthenticationModule" lockItem="true" />
                <add name="UrlAuthorizationModule" lockItem="true" />
                <add name="BasicAuthenticationModule" lockItem="true" />
                <add name="WindowsAuthenticationModule" lockItem="false" />

Bu değişiklikleri yapmak, mevcut web yapılandırma ayarlarının IIS Express için applicationHost dosyasında bulunanları geçersiz kılmasına olanak tanır.


1
Bu değişiklikler ve bir oturum kapatma benim için çalıştı. Bildirim simgesinden IIS Express'i durdurup VS'yi yeniden başlatmak işe yaramadığı için bir şey önbelleğe alındı. Bu hata gerçekten can sıkıcıdır, birkaç ayda bir veya altı ayda bir yeni bir VM veya geliştirici bilgisayarı oluşturulduğunda ortaya çıkar. Her zaman yarım güne kadar kayıplara neden olur ve ayarlarla uğraşmaz. Sorun şu ki, bu ayarların hemen düzeltmesi gerekse de, olmuyor ve etrafta oynadıktan sonra aniden çalışıyor, çok garip ve bundan hoşlanmıyorum. Ardından bir oturumu kapatma önerilir. Bir dahaki sefere, izole etmeye çalışacağım, ancak bu çok can sıkıcı bir varsayım.
Tony Wall

6

Ayrıca web projeniz için proje özelliklerini değiştirebilir, sol sekmelerden "Web" i seçebilir ve ardından Sunucular açılır menüsünü "Yerel IIS" olarak değiştirebilirsiniz. Yeni bir sanal dizin oluşturun ve site / uygulama havuzunuzu istediğiniz gibi ayarlamak için IIS yöneticisini kullanın.

Yerel olarak test etmek için genellikle yerel bir IIS v-dizininiz (veya siteniz) olduğu için bu yöntemi tercih ediyorum. Bu şekilde diğer siteleri de etkilemeyeceksiniz.

Web Projesi Özellikleri


1

Doğru cevabın yukarıda user3149240 tarafından verildiği görülmektedir. Ancak Neil Watson'ın da belirttiği gibi applicationhost.config dosyası burada iş başında.

Değişiklikler aslında VS Özellik bölmesinde veya farklı bir noktada olsa da dosyada yapılabilir. Applicationhost.config dosyasının altına yakın bir yerde bir dizi konum öğesi bulunur. IIS Express için her uygulamada bunlardan biri var gibi görünüyor. Kullanıcı arayüzündeki ayarların değiştirilmesi dosyanın bu bölümünü günceller. Bu nedenle, ayarları UI aracılığıyla değiştirebilir veya bu dosyayı değiştirebilirsiniz.

Anonim yetkilendirme kapalı ve Windows yetkilendirme açık olan bir örnek:

<location path="MyApp">
    <system.webServer>
        <security>
            <authentication>
                <windowsAuthentication enabled="true" />
                <anonymousAuthentication enabled="false" />
            </authentication>
        </security>
    </system.webServer>
</location>

Bu, VS kullanıcı arayüzünde şunlara eşdeğerdir:

Anonymous Authentication: Disabled
Windows Authentication: Enabled

Mevcut VS'de bu çalışmıyor, hem kullanıcı belgelerinde hem de çözüm .vs / config yollarında applicationhost.config modüllerinin kilidi açılmış olsa bile her zaman kilitli olduğunu söyleyecektir. Ayrıca burası tek yer değildir, özellikler penceresinden ayarlar gerçekte VS web projesinin XML'inde saklanır. Ancak önemli değil çünkü onları değiştirmek de yardımcı olmuyor, uygulama ana bilgisayarı her zaman geçersiz kılar. Bu değişikliklerin işe yaraması için bir oturum kapatma gerekliydi, hepsi bu.
Tony Wall

0

F4 beni her zaman bu panele getirmiyor. Ayrıca bir resmin bin kelimeye bedel olduğu da sık sık söylenir.

görüntü açıklamasını buraya girin

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.