Menerima prompt login menggunakan otentikasi windows terintegrasi

108

Saya memiliki aplikasi .NET 3.5 yang berjalan di bawah IIS 7 di Windows 2003 server dan tidak bisa mendapatkan otentikasi windows terintegrasi bekerja dengan baik karena saya terus diminta untuk login. Saya telah mengatur Otentikasi Windows untuk diaktifkan di IIS dengan semua jenis keamanan lainnya dinonaktifkan dan otentikasi / otorisasi file web.config aplikasi saya diatur sebagai:

<system.web>
    <compilation debug="true" strict="false" explicit="true" targetFramework="3.5" />
    <authenticationmode="Windows"/>
    <authorization>
    <deny users = "?" />
    </authorization>
</system.web>

Dengan pengaturan ini, saya mengharapkan verifikasi di belakang layar dari pengguna Windows untuk mengizinkan akses dan menolak pengguna anonim. Namun, yang saya dapatkan adalah pop-up login Windows saat saya mencoba mengakses situs.

Saya telah memecahkan masalah ini selama beberapa hari sekarang dan tidak dapat menemukan masalahnya. Berdasarkan posting dengan masalah serupa, saya mengonfirmasi bahwa URL saya tidak menyertakan periode apa pun, memeriksa ulang apakah pengaturan IE saya disetel ke Aktifkan Otentikasi Windows Terpadu, dan juga menambahkan URL saya ke situs intranet saya, tetapi masih mendapatkan munculan.

Untuk memecahkan masalah lebih lanjut, saya mengaktifkan Autentikasi Anonim di IIS dan memodifikasi file web.config saya yang memungkinkan saya masuk dan kemudian menambahkan Response.Write (System.Security.Principal.WindowsIdentifity.getcurrent (). User.name.toString () ) untuk mencoba melihat pengguna apa yang sedang digunakan dalam otentikasi. Hasil yang saya dapatkan adalah IIS APPPOOL \ myapp yang jelas merupakan pool aplikasi IIS untuk aplikasi saya.

Saya sangat menghargai bantuan apa pun yang dapat diberikan siapa pun sehingga saya masih hanya menggunakan otentikasi windows tetapi tidak mendapatkan pop-up dan otentikasi windows dilakukan terhadap pengguna Windows yang sebenarnya.

Terima kasih.


Catatan tambahan setelah pemecahan masalah lebih lanjut:

Hanya memperhatikan bahwa ketika login gagal dan prompt login Windows muncul lagi, itu menunjukkan nama pengguna yang mencoba untuk login sebagai "SERVERNAME" \ "USERNAME" yang membuat saya percaya itu mencoba untuk memvalidasi pengguna terhadap server vs. domain. Untuk mengonfirmasi ini, saya membuat akun pengguna lokal langsung di server aplikasi dengan nama pengguna dan kata sandi yang sama dengan pengguna domain jaringan dan mencoba masuk lagi. Hasilnya adalah saya menerima prompt login lagi tetapi ketika saya memasukkan nama pengguna dan kata sandi kali ini, saya berhasil masuk. Pengguna jaringan dan server aplikasi berada di domain yang sama jadi benar-benar tidak yakin mengapa otentikasi IIS mengarah ke akun server aplikasi lokal dan bukan ke akun domain. Saya menyadari ini adalah pertanyaan IIS pada saat ini jadi posting di forums.iis.

Casey
sumber
4
Harus ada ruang antara otentikasi dan mode, seperti: <authentication mode="Windows" />Mudah-mudahan itu hanya salah ketik dalam pertanyaan Anda?
Sean Hanley
3
Anda menjalankan iis 7 di server 2003, apakah Anda yakin saya hampir yakin ini tidak mungkin.
Anicho

Jawaban:

86

Saya memiliki server Windows 2008 yang sedang saya kerjakan, jadi jawaban saya tidak sepenuhnya sama dengan apa yang dimiliki OP di server Windows 2003.

Inilah yang saya lakukan (merekam ini di sini sehingga saya dapat menemukannya nanti).

Saya mengalami masalah yang sama:

prompt login

Di file Web.config saya , saya memiliki bagian ini:

<system.web>
    <authentication mode="Windows" />
    <authorization>
        <allow users="*" />
        <deny users="?" />
    </authorization>
</system.web>

Di bawah IIS, semua ini tampaknya diselesaikan di bawah ikon Otentikasi .

  1. Edit Izin: Pastikan akun ASP.NET Anda memiliki izin. Milik saya awalnya tidak ditambahkan.

Izin ASP.NET

Sekarang masuk ke fitur Otentikasi :

Fitur Otentikasi

Aktifkan Otentikasi Anonim dengan IUSR:

Otentikasi Anonim

Aktifkan Otentikasi Windows , lalu Klik Kanan untuk mengatur Penyedia .

NTLM harus PERTAMA!

Otentikasi Windows

Berikutnya, periksa bahwa di bawah Advanced Settings ... yang Perlindungan Diperpanjang adalah Menerima dan Aktifkan Kernel-mode otentikasi adalah DIPERIKSA:

Pengaturan lanjutan

Setelah saya melakukan ini, saya kembali ke aplikasi web saya, mengklik tautan Jelajahi, dan masuk tanpa harus memberikan kredensial saya lagi.

Saya harap ini terbukti bermanfaat bagi banyak dari Anda, dan semoga bermanfaat bagi saya di kemudian hari.

jp2code
sumber
1
Terima kasih, Sujay. Saya perhatikan sebagian besar teknik ini pada SO kekurangan foto untuk menunjukkan apa yang mereka bicarakan, jadi saya ingin menunjukkan semua langkah yang saya gunakan. Jika ini tidak berhasil untuk seseorang, setidaknya mereka dapat melihat semua langkah yang mereka ambil, dan opsi lain apa untuk dicoba.
jp2code
1
Ini luar biasa. Aku menjadi gila karena ini. Dan foto membuatnya jauh lebih mudah. TERIMA KASIH!!
KratosMafia
1
Itu berhasil untuk saya juga, tetapi saya harus memulai ulang Windows 2008 r2 saya di akhir. Saya pikir mungkin penting untuk menyebutkannya.
Aleksei Mialkin
6
tidak bekerja untuk Windows Server 2012 yang menjalankan IIS 8.5
Minh Nguyen
3
Bukankah ini hanya mengaktifkan otentikasi anonim sehingga memungkinkan otentikasi windows diabaikan? Pertanyaan yang sebenarnya, bagaimanapun hal di atas tampak bagi saya.
Paul Hodgson
49

Hanya untuk keuntungan orang lain. Jika kesalahannya adalah a 401.1 Unauthorizeddan kode kesalahan Anda cocok 0xc000006d, maka Anda benar-benar mengalami "fitur" keamanan yang memblokir permintaan ke FQDN atau header host kustom yang tidak cocok dengan nama mesin lokal Anda:

Ikuti artikel dukungan ini untuk memperbaiki masalah:

https://webconnection.west-wind.com/docs/_4gi0ql5jb.htm (asli, sekarang tidak berfungsi: http://support.microsoft.com/kb/896861 )

Dari artikel dukungan, untuk memastikannya tidak hilang:

Solusinya adalah peretasan registri yang menonaktifkan kebijakan ini secara eksplisit.

Untuk melakukan konfigurasi ini secara manual temukan kunci ini di registri di server:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa

dan edit atau tambahkan kunci baru:

DisableLoopbackCheck (DWORD)

kemudian mengirim nilai ke 1 untuk menonaktifkan pemeriksaan loopback (otentikasi lokal berfungsi), atau ke 0 (otentikasi lokal tidak diperbolehkan).

Atau lebih mudahnya Anda bisa menggunakan Powershell:

New-ItemProperty HKLM:\System\CurrentControlSet\Control\Lsa -Name "DisableLoopbackCheck" -Value "1" -PropertyType dword

Sepertinya versi terbaru Windows 10 (1803 dan yang lebih baru?) Juga memerlukan pengaturan konfigurasi ini untuk mengautentikasi secara lokal.

Yang ini memakan waktu cukup lama karena komentar semua orang di sini gagal membantu saya. Saya menemukan artikel ini dan itu memperbaikinya!

kamranicus
sumber
3
Anda tuan adalah pahlawan f * g saya! Saya telah melalui begitu banyak "solusi" untuk mencapai ini. Terima kasih!
embun
1
Astaga! dua hari mencoba untuk membuat hal ini bekerja, dan akhirnya Anda memberi saya jawabannya! Terima kasih!
BernieSF
1
Setelah membaca beberapa jawaban dan melihat bahwa konfigurasinya identik dengan milik saya, inilah jawabannya!
Sietse
1
Anda legenda! Ini berhasil untuk saya. Saya menghabiskan waktu lama untuk menemukan ini.
Andy Vennells
2
@PTD Diperbarui dengan artikel baru dan ringkasan tambahan untuk anak cucu sehingga tidak hilang. Begitu banyak untuk dukungan MS permalinks!
kamranicus
26

Saya memiliki masalah serupa dimana saya hanya ingin melindungi bagian tertentu dari situs saya. Semuanya bekerja dengan baik kecuali di IE. Saya mengaktifkan Anonim dan Autentikasi Windows. Untuk Anonim, Identitas diatur ke identitas Kumpulan Aplikasi. Masalahnya ada pada Otentikasi Windows. Setelah beberapa penggalian, saya menyalakan fiddler dan menemukan bahwa itu menggunakan Kerberos sebagai penyedia (sebenarnya sudah diatur ke Negosiasi secara default). Saya beralih ke NTLM dan memperbaikinya. HTH

Daudi

Daudi
sumber
1
Itu dilakukan untuk saya, terima kasih! Saya dapat mengambil pengguna Windows saat mengakses secara lokal, tetapi permintaan kredensial akan muncul dari mesin lain di domain.
JSancho
1
@Daudi Bagaimana Anda mengatur identitas per metode otentikasi?
Rob Bell
18

Tambahkan izin [Pengguna Domain] ke keamanan web Anda.

  • Klik kanan di situs Anda di IIS di bawah folder Situs
  • Klik Edit Izin ...
  • Pilih tab Keamanan
  • Di bawah bagian Grup atau nama pengguna klik tombol Edit ...
  • Dalam izin muncul, di bawah Grup atau nama pengguna klik Tambahkan ...
  • Masukkan [Pengguna Domain] di nama objek untuk memilih area teks dan klik OK untuk menerapkan perubahan
  • Klik OK untuk menutup pop up Izin
  • Klik OK untuk menutup pop up Properties dan menerapkan pengaturan baru Anda
Harry
sumber
10
Langkah-langkah tentang cara melakukan ini akan sangat membantu.
Drew Chapin
2
+1. Anda telah menyelamatkan hari saya dan kewarasan saya. Sangat dihargai!
stakx - tidak lagi berkontribusi
11

Jangan membuat kesalahan di server Anda dengan mengubah segalanya. Jika Anda memiliki prompt windows untuk logon saat menggunakan Windows Authentication pada 2008 R2, cukup masuk ke Providersdan naikkan NTLMke NAIK untuk setiap aplikasi Anda. Ketika Negotiateyang pertama dalam daftar, Otentikasi Windows dapat berhenti bekerja properti untuk aplikasi tertentu pada 2008 R2 dan Anda dapat diminta untuk memasukkan nama pengguna dan kata sandi daripada tidak pernah berfungsi. Itu kadang-kadang terjadi ketika Anda melakukan pembaruan pada aplikasi Anda. Pastikan saja daripada NTLMyang pertama dalam daftar dan Anda tidak akan pernah melihat masalah ini lagi.

Slo
sumber
1
Ini memperbaikinya untuk saya.
Bigwave
9
Kecuali tentu saja Anda tidak ingin NTLM pertama dalam daftar Anda ... ada konsekuensi untuk mengambil tindakan ini, siapa pun yang membuat perubahan seperti itu harus memahami perbedaan antara NTLM dan Negosiasi (pada tingkat paling dasar Negosiasikan upaya pertama otentikasi Kerberos dan jatuh kembali ke NTLM jika gagal). Jika Anda menginginkan Kerberos (dan banyak yang menginginkannya) maka ini bukan solusi yang baik. Beberapa detail di sini: msdn.microsoft.com/en-us/library/aa480475.aspx
TCC
8

Jika URL Anda memiliki titik di nama domain, IE akan memperlakukannya seperti alamat internet dan bukan lokal. Anda memiliki setidaknya dua opsi:

  1. Dapatkan alias untuk digunakan di URL untuk menggantikan server.domain. Misalnya, myapp.
  2. Ikuti langkah-langkah di bawah ini di komputer Anda.

Buka situs dan batalkan dialog login. Biarkan ini terjadi:

masukkan deskripsi gambar di sini

Dalam pengaturan IE:

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Bob Horn
sumber
1
Kami menggunakan Windows Server 2012 dan ini adalah satu-satunya solusi yang berhasil untuk kami. Terima kasih banyak!
ashilon
5

WindowsIdentity.GetCurrentbenar: Anda harus mendapatkan pengguna APPPOOL. Ini karena proses ASP.NET, yang menjalankan kode Anda, adalah identitas saat ini. Jika Anda ingin mengembalikan pengguna mengenai identitas situs, Anda harus menambahkan baris berikut di web.config Anda:

<identity impersonate="true" />

Ini menyebabkan proses mengasumsikan identitas pengguna yang meminta halaman. Semua tindakan akan dilakukan atas nama mereka, jadi setiap upaya untuk membaca folder di jaringan atau mengakses sumber basis data dan sejenisnya berarti pengguna saat ini memerlukan izin untuk hal-hal tersebut. Anda dapat membaca lebih lanjut tentang peniruan di sini . Perhatikan bahwa bergantung pada bagaimana topologi server web / database Anda disiapkan, Anda mungkin mengalami masalah delegasi dengan peniruan identitas diaktifkan.

Tetapi masalah asli Anda adalah tampaknya identitas tidak dapat ditentukan dan Anda mendapatkan popup login. Saya perhatikan bahwa Anda tidak memerlukan <deny>blokir jika Anda telah menonaktifkan otentikasi anonim di IIS. Kami tidak pernah memasukkannya (kecuali khusus<location> blok dan semacamnya) jadi saya akan mengatakan Anda dapat mencoba menghapusnya dan mencoba lagi. Namun, segala sesuatu yang lain terdengar benar.

Anda tidak menentukan pengguna apa yang menjalankan pool aplikasi di IIS. Apakah ini akun khusus atau akun default? Jika kustom, apakah itu akun domain atau akun lokal di server web? Akun kustom terkadang memerlukan beberapa langkah lagi, seperti mendaftarkan SPN. Selain itu, mungkin ada masalah dengan akun kustom yang tidak memiliki izin di AD untuk menyelesaikan akun pengguna yang masuk.

Anda juga dapat memeriksa log IIS untuk melihat respons apa yang dikembalikan. Kemungkinan besar akan menjadi 401, tetapi harus memiliki sub nomor setelahnya seperti 401,2 atau sesuatu. Sub-nomor tersebut terkadang dapat membantu menentukan akar masalahnya. Ini artikel KB daftar lima.

Sean Hanley
sumber
1 untuk menyebutkan persyaratan SPN. Faktanya, sebagian besar masalah yang saya hadapi dengan munculan login disebabkan oleh SPN yang hilang di lingkungan Kerberos.
SBS
5

Ini memperbaikinya untuk saya.

Server Saya dan PC Klien adalah Windows 7 dan berada dalam domain yang sama

  1. di iis7.5-aktifkan otentikasi windows untuk Intranet Anda (nonaktifkan semua otentikasi lainnya .. juga Tidak perlu menyebutkan otentikasi windows di file web.config

  2. kemudian pergi ke PC Klien .. IE8 atau 9- Alat-Opsi internet-Keamanan-Intranet Lokal-Situs-lanjutan-Tambahkan situs Anda (hapus tanda tiket "memerlukan server verfi ... "..tidak perlu

  3. IE8 atau 9- Tools-internet Options-Security-Local Intranet-Custom level-userauthentication-logon-pilih logon otomatis dengan nama pengguna dan kata sandi saat ini

  4. simpan pengaturan ini .. Anda sudah selesai .. Tidak perlu lagi meminta nama pengguna dan sandi.

  5. Pastikan, karena pc klien Anda adalah bagian dari domain, Anda harus memiliki GPO untuk pengaturan ini, .. atau jika tidak, pengaturan ini akan dikembalikan saat pengguna masuk ke windows di lain waktu

Jose Arun
sumber
2
Untuk 1) Saya benar-benar mengaktifkan Peniruan Identitas dan Otentikasi Windows dan semuanya baik-baik saja. Kuncinya bagi saya adalah 2) di mana Anda menambahkan alamat situs jarak jauh ke zona intranet lokal.
SideFX
4

Bisa terkait browser. Jika Anda menggunakan IE, Anda dapat pergi ke Pengaturan Lanjutan dan centang kotak "Aktifkan Otentikasi Terintegrasi Windows" dicentang.

Dante
sumber
4

Dalam kasus saya, pengaturan otorisasi tidak disiapkan dengan benar.

saya harus

  1. buka Aturan Otorisasi .NET di Manajer IIS

    buka Aturan Otorisasi .NET di Manajer IIS
  2. dan menghapus yang Deny Aturan

    hapus Aturan Tolak
johnecon
sumber
3

Di Intranet kami, masalah diselesaikan di sisi klien dengan mengubah pengaturan keamanan seperti yang ditunjukkan di sini. Salah satu kotak centang di sebelah kanan berfungsi untuk kami.

Opsi Internet IE

mosheb
sumber
2

Saya baru saja memecahkan masalah serupa dengan aplikasi ASP.Net.

Gejala: Saya bisa masuk ke aplikasi saya menggunakan pengguna lokal, tetapi bukan pengguna domain, bahkan jika mesin telah bergabung dengan benar ke domain (seperti yang Anda katakan di Catatan Tambahan Anda). Di penampil acara Keamanan, ada acara dengan ID = 4625 "Domain sid tidak konsisten".

Solusi: Saya menemukan solusinya di sini . Masalahnya adalah bahwa mesin uji saya di mana mesin virtual kloning (Windows Server 2008 R2; satu Pengontrol Domain, dan satu server web). Keduanya memiliki mesin SID yang sama, yang ternyata menyebabkan masalah. Inilah yang saya lakukan:

  1. Hapus server web dari domain.
  2. Jalankan c: \ Windows \ System32 \ Sysprep \ Sysprep.exe di VM.
  3. Mulai ulang VM.
  4. Bergabunglah dengan server web ke domain.

Anda kehilangan beberapa pengaturan dalam proses (preferensi pengguna, IP statis, membuat ulang sertifikat yang ditandatangani sendiri), tetapi sekarang saya telah membuatnya kembali, semuanya berfungsi dengan benar.

Matthieu
sumber
Kloning menyebalkan saat Anda mencoba menyiapkan delegasi terbatas.
SideFX
2

Saya juga memiliki masalah yang sama. Mencoba sebagian besar hal yang ditemukan di forum ini dan lainnya.

Akhirnya berhasil setelah melakukan sedikit RnD sendiri.

Saya masuk ke Pengaturan IIS dan kemudian ke opsi izin situs web saya menambahkan Grup Pengguna Domain Organisasi saya.

Sekarang karena semua pengguna domain saya telah diberikan akses ke situs web itu, saya tidak mengalami masalah itu.

Semoga ini membantu

Saurabh
sumber
4
Opsi izin apa yang Anda bicarakan? Dapatkah Anda memberikan langkah yang lebih detail tentang apa yang Anda lakukan?
Drew Chapin
1

Sudahkah Anda mencoba masuk dengan awalan domain Anda, misalnya DOMAIN \ Nama pengguna? IIS 6 default menggunakan komputer host sebagai domain default sehingga menentukan domain saat logon dapat memecahkan masalah.

chalemic
sumber
1

Saya mencoba trik konfigurasi IIS di atas dan peretasan registri loopback, dan saya meninjau dan membuat ulang izin kumpulan aplikasi dan lusinan hal lainnya dan masih tidak dapat menyingkirkan loop otentikasi yang berjalan pada workstation pengembangan saya dengan IIS Express atau IIS 7.5, dari sesi penjelajahan lokal atau jarak jauh. Saya menerima empat tanggapan status 401,2 dan halaman kosong. Situs yang sama persis yang diterapkan ke server pementasan IIS 8.5 saya bekerja dengan sempurna.

Akhirnya saya melihat markup di Badan Respon yang diberikan kosong oleh browser berisi halaman default untuk log in yang berhasil. Saya memutuskan bahwa penanganan Kesalahan Kustom untuk ASP.NET dan HTTP untuk kesalahan 401 mencegah / mengganggu Otentikasi Windows di workstation saya tetapi bukan server pementasan. Saya menghabiskan beberapa jam mengutak-atik ini, tetapi segera setelah saya menghapus penanganan khusus hanya untuk kesalahan 401, workstation kembali normal. Saya menyajikan ini sebagai cara lain untuk menembak kaki Anda sendiri.

Mike M.
sumber
0

Otentikasi Windows di IIS7.0 atau IIS7.5 tidak bekerja dengan kerberos (provider = Negotiate) ketika identitas kumpulan aplikasi adalah ApplicationPoolIdentity Seseorang harus menggunakan Layanan Jaringan atau akun bawaan lainnya. Kemungkinan lain adalah menggunakan NTLM agar Windows Authenticatio berfungsi (di Autentikasi Windows, Penyedia, letakkan NTLM di atas atau hapus negosiasi)

chris van de vijver

Chris van de vijver
sumber
3
Salah. Mulai ulang server Anda. Perhatikan itu berfungsi sekarang. Terapkan Hotfix KB2545850.
Amit Naidu
Wow. Reboot baru saja memperbaikinya untuk saya. Perlu memeriksa sekarang untuk berapa lama. Ada ide? Belum menyelidiki Hotfix.
mplwork
kami benar-benar memiliki kasus yang sama - Negosiasi tidak berfungsi dengan ApplicationPoolIdentity hingga reboot.
SergeyT
0

Saya memiliki masalah yang sama karena pengguna (Identitas) yang saya gunakan di pool aplikasi tidak berada di bawah grup IIS_IUSRS. Menambahkan pengguna ke grup dan semuanya berfungsi

pengguna3731689
sumber
0

Dalam kasus saya, solusinya adalah (di atas penyesuaian yang disarankan di atas) untuk memulai ulang komputer pengembangan lokal / pengguna saya / IIS (server hosting). Pengguna saya baru saja ditambahkan ke grup keamanan AD yang baru dibuat - dan kebijakan tidak berlaku untuk akun AD pengguna sampai saya keluar / menghidupkan ulang komputer saya.

Semoga ini bisa membantu seseorang.

ukie
sumber
0

Saya mengalami masalah meminta kredensial yang sama, dan melakukan pencarian cepat dan tidak ada di internet yang akan memperbaikinya. Butuh beberapa waktu untuk menemukan masalahnya, yang konyol.

Di IIS -> Pengaturan Lanjutan -> Kredensial Jalur Fisik (kosong)

Segera setelah saya menambahkan ID mesin (domain / pengguna) yang memiliki akses ke VM / server, permintaan kata sandi akan berhenti.

Semoga ini membantu

kao
sumber
0

Saya mengalami masalah ini pada .net core 2 dan setelah melalui sebagian besar saran dari sini tampaknya kami melewatkan pengaturan di web.config

<aspNetCore processPath="dotnet" arguments=".\app.dll" forwardWindowsAuthToken="false" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />

Pengaturan yang benar adalah forwardWindowsAuthToken = "true" yang tampaknya jelas sekarang, tetapi ketika ada begitu banyak situasi untuk masalah yang sama, lebih sulit untuk menentukan

Sunting: Saya juga merasa terbantu dengan artikel Msdn berikut yang membahas pemecahan masalah.

Eugen
sumber
-1

Saya mendapat masalah yang sama dan itu diselesaikan dengan mengubah identitas pool aplikasi dari pool aplikasi yang menjalankan aplikasi web ke NetworkService masukkan deskripsi gambar di sini

Syed
sumber