Masalah otentikasi saat debugging di VS2013 - iis express

103

Saya mencoba mengambil nama pengguna windows saat debugging di Visual Studio 2013. Saya hanya menggunakan:

httpcontext.current.user.identity.name

Jika saya menjalankan ini di Dev Server saya, ini berfungsi dengan baik, jika saya menjalankannya dalam mode debug pada versi Visual Studio sebelumnya, ini juga berfungsi dengan baik.

Masalah saya adalah - Jika saya menjalankan ini di visual studio 2013 saya mendapatkan string kosong.

Konfigurasi web saya adalah sebagai berikut.

<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>
Neil Watson
sumber

Jawaban:

215

Saya baru saja meningkatkan ke VS 2013 dari VS 2012 dan identitas pengguna saat ini (HttpContext.User.Identity) datang sebagai anonim.

Saya mencoba mengubah applicationhost.config IIS express, tidak ada perbedaan.

Solusinya adalah melihat properti proyek web, tekan F4 untuk mendapatkan properti proyek ketika Anda memiliki tingkat teratas proyek yang dipilih. Jangan klik kanan pada proyek dan pilih properti, ini adalah sesuatu yang sama sekali berbeda.

Ubah Anonymous Authentication menjadi Disabled dan Windows Authentication menjadi Enabled.

Bekerja seperti saus :)

Toby Simmerling
sumber
10
Terima kasih untuk yang itu. Saya tidak percaya mereka menambahkan itu sebagai 'peningkatan'. Itulah kegunaan web.config. Sekarang kita tidak bisa mempercayai apa yang kita lihat di web.config. Cemerlang.
trucker_jim
4
Saya yakin ini adalah pendekatan yang lebih baik daripada jawaban yang diterima, karena tidak akan mempengaruhi aplikasi lain yang berjalan di IIS Express.
niaher
Terima kasih banyak. Itu juga berhasil untuk saya! Adalah Proyek Visual Studio 2008 saya meningkatkan ke Visual Studio 2013.
Rob K.
Di VS 2012 saya menggunakan: "Gunakan Visual Studio Development Server". Jadi upgrade dan ini berhasil. Meskipun sekarang menjalankan IIS Express.
Thomas Koelle
Yang ini harus menjadi jawaban yang diterima, jika Anda baru saja meningkatkan ke VS 2013.
Nishant
130

Saat saya meneliti ini, saya menemukan jawaban saya, tetapi tidak dapat menemukan jawabannya di internet, jadi saya pikir saya akan membagikan ini:

Saya memperbaiki masalah saya dengan mengubah file applicationhost.config saya. File saya disimpan di folder "\ My Documents \ IISExpress \ config".

Tampaknya VS2013 mengabaikan file web.config saya dan menerapkan metode otentikasi yang berbeda.

Saya harus memodifikasi bagian file ini agar terlihat seperti di bawah ini. Sebenarnya, saya hanya memodifikasi anonymousAuthentication menjadi false dan mode windowsAuthentication menjadi true.

<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>
Neil Watson
sumber
2
Saya harus melakukan ini untuk mendapatkan debugging di VS2013 menggunakan IIS Express untuk bekerja dengan andal. Tanpa ini, sepertinya bekerja dengan baik sekali, kemudian 401 setelahnya. (1) Apakah ada perintah AppCmd ​​yang akan mengubah file applicationhost.config, dan (2), F4 di Proyek Web memungkinkan saya menonaktifkan Anonymous Auth dan Windows Auth aktif. Melakukan itu di VS2012 bekerja dengan baik, di VS2013 tidak menghasilkan 401 lingkungan dev gratis.
IanT8
4
@Neil, Anda menyelamatkan hari saya. BTW: Tidak perlu mematikan anonymousAuthentication. Ini cukup untuk menyalakan windowsAuthentication. Pengaturan ini mengontrol mekanisme otentikasi apa yang diizinkan untuk digunakan situs web.
chiccodoro
+1 juga ... telah mencoba menyelesaikan masalah yang mengganggu ini untuk sementara waktu dengan isntance IISExpress lokal saya
Jeff Lewis
Ah, BAHWA cara melakukannya. Jenius. Terima kasih atas tip ini, sangat berguna!
Mike Gledhill
1
Saya harus menghapus "Negosiasikan" untuk dapat menguji panggilan layanan web (dengan WSE3) tanpa mendapatkan 401.
Wolf5
41

Dalam Visual Studio 2013 DAN VS15 (tapi saya kira jika sama untuk semua versi lainnya) cukup tekan F4 dan ubah dua properti ini: - Anonymous Authentication: Disable - Windows Authentication: Enable

ThaNet
sumber
1
Terima kasih untuk yang itu. Saya tidak percaya mereka menambahkan itu sebagai 'peningkatan'. Itulah kegunaan web.config. Sekarang kita tidak bisa mempercayai apa yang kita lihat di web.config. Cemerlang.
trucker_jim
1
Anda baru saja menyelamatkan saya dari rollback ke Visual Studio 2010!
Julien P
2
Tidak percaya ini bukan pertanyaan / jawaban # 1 dari semua posting SO ini yang terus berbicara tentang pengaturan IIS
Hilang
38

Di VS2013 F4 pada proyek Anda untuk melihat jendela properti dan menonaktifkan akses Anonim dan mengaktifkan "otentikasi Windows"

Maka itu akan berhasil. Tidak perlu mengubah apa pun

James Pressley
sumber
Frustasi, opsi ini ada saat Anda ingin men-debug proyek web, tetapi tidak ada untuk proyek Layanan. Grrrr ...
Mike Gledhill
9

VS 2015 mengubah ini. Itu menambahkan folder .vs ke proyek web saya dan applicationhost.config ada di sana. Saya membuat perubahan yang disarankan (window authentication = true, anon = false) dan mulai mengirimkan nama pengguna alih-alih kosong.

Tom McDonald
sumber
8

Buka file applicationHost.config yang terletak di folder C: \ Users [userid] \ Documents \ IISExpress \ config. Di dalam file ini ubah overrideModeDefault dari anonymousAthentication dan windowsAuthentication menjadi "Allow"

 <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>

Selanjutnya, ubah lockItem menjadi "false" untuk AnonymousAuthenticationModule dan WindowsAuthenticationModule

  <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" />

Membuat perubahan ini akan memungkinkan pengaturan konfigurasi web yang ada untuk menimpa apa yang ada di file applicationHost untuk IIS Express.

ngiunta
sumber
1
Perubahan ini ditambah logoff bekerja untuk saya. Ada yang di-cache, karena menghentikan IIS Express dari ikon notifikasi dan memulai ulang VS tidak berfungsi. Kesalahan ini sangat mengganggu, ini terjadi setiap beberapa bulan atau setengah tahun ketika VM baru atau PC pengembang dibuat. Itu selalu menyebabkan hingga setengah hari hilang, mengotak-atik pengaturan. Masalahnya adalah meskipun pengaturan ini harus segera diperbaiki, itu tidak dan setelah bermain-main tiba-tiba berfungsi, sangat aneh dan saya tidak suka itu. Logoff kemudian direkomendasikan. Lain kali itu terjadi, saya akan mencoba mengisolasi, tetapi ini adalah default yang sangat mengganggu.
Tony Wall
6

Anda juga dapat mengubah properti proyek untuk proyek web Anda, pilih "Web" dari tab kiri, lalu ubah menu tarik-turun Server menjadi "IIS Lokal". Buat direktori virtual baru dan gunakan manajer IIS untuk menyiapkan kumpulan situs / aplikasi Anda sesuai keinginan.

Saya lebih suka metode ini, karena Anda biasanya memiliki direktori v (atau situs) IIS lokal untuk diuji secara lokal. Anda juga tidak akan memengaruhi situs lain dengan cara ini.

Properti Proyek Web

ScottLenart
sumber
1

Tampaknya jawaban yang benar diberikan oleh pengguna3149240 di atas. Namun, Seperti yang ditunjukkan Neil Watson, file applicationhost.config sedang dimainkan di sini.

Perubahan sebenarnya dapat dilakukan di panel VS Property atau di file meskipun di tempat yang berbeda. Di dekat bagian bawah file applicationhost.config adalah satu set elemen lokasi. Setiap aplikasi untuk IIS Express tampaknya memiliki salah satunya. Mengubah pengaturan di UI memperbarui bagian file ini. Jadi, Anda dapat mengubah pengaturan melalui UI atau memodifikasi file ini.

Berikut ini contoh dengan autentikasi anonim nonaktif dan autentikasi Windows aktif:

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

Ini setara di VS UI dengan:

Anonymous Authentication: Disabled
Windows Authentication: Enabled
EricksonG
sumber
Dalam VS saat ini, ini tidak berfungsi, ia akan selalu mengatakan terkunci bahkan ketika modul applicationhost.config telah dibuka kuncinya di dokumen pengguna dan jalur solusi .vs / config. Juga tidak benar ini adalah satu-satunya tempat, pengaturan dari jendela properti sebenarnya disimpan dalam XML proyek web VS. Tetapi tidak masalah karena mengubahnya juga tidak membantu, applicationhost selalu menimpa. Logoff diperlukan agar perubahan itu berfungsi, itu saja.
Tony Wall
0

F4 tidak selalu membawa saya ke panel ini. Selain itu, sering dikatakan bahwa sebuah gambar memiliki arti ribuan kata.

masukkan deskripsi gambar di sini

Weihui Guo
sumber