Saya menciptakan sebuah merek baru projet dengan Visual Studio 2013, saya memilih Asp.Net MVC dan framework 4.5.1 proyek dibuat, kemudian, saya melakukan apa-apa lagi dari F5 untuk menjalankan default halaman web. Sayangnya, itu menghasilkan redirect ke halaman login yang mengarahkan ke halaman login juga. Berikut adalah versi singkat dari url yang saya miliki di browser:
http://localhost:5285/Account/Login?ReturnUrl=%2FAccount%2FLogin%3FReturnUrl%3D%252FAccount%252FLogin%253FReturnUrl%253D%25252FAccount%25252FLogin%25253FReturnUrl%25253D%2525252FAccount%2525252FLogin%2525253FReturnUrl%2525253D%252525252FAccount%252525252FLogin%252525253FReturnUrl%252525253D%25252525252FAccount%25252525252FLogin%25252525253FReturnUrl%25252525253D%2525252525252FAccount%2525252525252FLogin%2525252525253FReturnUrl%2525252525253D%252525252525
Saya tidak memiliki kesalahan apapun dalam Event Viewer. Tapi di layar aku melihat :
"HTTP Error 404.15 - Tidak Ditemukan permintaan penyaringan modul dikonfigurasi untuk menolak permintaan mana query string adalah terlalu lama."
Website ini berjalan dengan pengaturan default di IIS Express. Bagaimana saya bisa memperbaiki ini masalah? Saya menduga ada sesuatu yang salah dengan saya Visual Studio 2013?
Ia bekerja jika saya membuat website baru dan saya host di IIS. Tapi jika saya membuat website baru (tanpa mengubah apa-apa) dan hanya tekan tombol play (yang mulai IIS Express by default), itu doesn't.
Saya telah menghapus setiap situs web dalam Dokumen\IISExpress\config\applicationhost.config. Saya telah dikompilasi ulang semuanya, dan itu dibuat entri ini :
<siteDefaults>
<logFile logFormat="W3C" directory="%IIS_USER_HOME%\Logs" />
<traceFailedRequestsLogging directory="%IIS_USER_HOME%\TraceLogFiles" enabled="true" maxLogFileSizeKB="1024" />
</siteDefaults>
<applicationDefaults applicationPool="Clr4IntegratedAppPool" />
<virtualDirectoryDefaults allowSubDirConfig="true" />
</sites>
Saya masih mendapatkan kesalahan dengan IIS Mengungkapkan, tidak dengan IIS.
Masalah ini adalah karena otentikasi mode yang dipilih(secara default) oleh MVC 5 Template, yang memicu ReturnUrl Gaya pengarahan yang mungkin menyebabkan loop tak terbatas jika tidak dikonfigurasi dengan benar.
Untuk menonaktifkan OWIN startup penemuan,menambahkan kunci ini ke webconfig file.
<add key="owin:AutomaticAppStartup" value="false"/>
Anda yang hilang [AllowAnonymous]
atribut pada action login.
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
// code....
}
2nd kemungkinan, khusus untuk IIS Express hanya itu, jika anda membuat standar yang sama WebApplication1
proyek beberapa kali, bermain dengan berbagai pengaturan otentikasi, IIS Express disimpan otentikasi tambahan pengaturan di dalamnya's file konfigurasi. Sesuatu seperti:
<location path="WebApplication1">
<system.webServer>
<security>
<authentication>
<windowsAuthentication enabled="true" />
<anonymousAuthentication enabled="false" />
</authentication>
</security>
</system.webServer>
</location>
</configuration>
Konfigurasi user's Dokumen folder Documents\IISExpress\config\
, dan yang harus anda perhatikan:
applicationhost.config
Kemudian hanya menghapus xml node <lokasi path="WebApplication1">
yang disebutkan di atas.
Jika anda'kembali menggunakan Visual Studio 2015 atau lebih tinggi, periksa jalan ini untuk config:
$(solutionDir)\.vs\config\applicationhost.config
Setiap solusi akan memiliki sendiri config file.
Aku tahu aku mungkin terlambat, dan ini tidak langsung untuk OP's pertanyaan. Tapi jika siapa pun di masa depan yang datang ke sini, periksa sekali lagi tentang AllowAnonymous
dan Otorisasi
atribut adalah bahwa, anda harus memeriksa semua tindakan anak juga.
Misalnya, saya memiliki tata Letak (yang halaman Login juga menggunakan) yang menyebut 2 anak tindakan untuk remah roti dan sidebar, dan mereka tidak memiliki AllowAnonymous
atribut (Controller Otorisasi
atribut).
Semoga bantuan ini.
Di IIS, Pilih situs web anda dan memeriksa untuk Otentikasi, Jika anda menggunakan bentuk-Bentuk Otentikasi kemudian -
ASP.Net MVC 5 template yang menambahkan Microsoft.Owin dan perpustakaan terkait dengan proyek. Sejak Owin infrastruktur doesn't membutuhkan bentuk-Bentuk Otentikasi, template juga memperkenalkan kunci berikut di web.config.
<system.webServer>
<modules>
<remove name="FormsAuthentication" />
</modules>
</system.webServer>
Kehadiran tombol ini bisa menjadi alasan untuk tidak diinginkan looping kembali ke halaman Login. Mengomentari hal ini dapat membantu memperbaiki masalah bagi beberapa orang.
Saya hanya berurusan dengan masalah ini selama berjam-jam.
Bagi saya, itu adalah di Startup.Auth.cs file.
Kode ini, ketika berkomentar keluar, berhenti redirect loop.
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login")
});
dalam kasus saya: saya _layout.cshtml, saya menggunakan Html.Tindakan untuk memanggil Aksi dari Mengotorisasi Controller: ex: Html.Tindakan("Hitung", "Produk") -> loop error
fix: hiasi oleh [AllowAnonymous] atribut dalam Aksi itu (atau menghapus helper Html dari _layout)
TL:DR? Jangan sebut dilindungi API web (web API yang membutuhkan Otorisasi) dari sebuah halaman otorisasi seperti ~/Akun/Login (yang, dengan sendirinya, TIDAK melakukan hal ini.). Jika anda melakukannya anda akan masuk ke aplikasi yang tak terbatas redirect loop pada sisi server.
Saya menemukan bahwa pelakunya adalah, secara tidak langsung, AccountController::Mengesahkan
dan fakta bahwa AccountController
dihiasi [Otorisasi]
.
Akar penyebabnya adalah Sammy() dipanggil dari HomeViewModel() (Baris ke-6 home.viewmodel.js), yang mengakses "dilindungi web API". Hal ini dilakukan untuk /Akun/Login, yang mengakibatkan /Akun/Login untuk mengarahkan dirinya sendiri.
Anda dapat mengkonfirmasi hal ini adalah penyebab masalah anda melalui beberapa metode:
AccountController::Mengesahkan
dengan [AllowAnonymous]
Solusinya adalah untuk hanya memancarkan app bundle (a.k."~/kumpulan/aplikasi") untuk pandangan yang sudah diperlukan otorisasi. Untuk pengetahuan saya /Akun/ pandangan klasik MVC berbasis pandangan, dan bukan bagian dari aplikasi datamodel/viewmodel, tapi aku telah keliru pindah bundel Script.Render(@"~/kumpulan/aplikasi")
panggilan ke _Layout.cshtml (menyebabkan web yang dilindungi panggilan API yang akan dibuat untuk semua MVC pandangan, termasuk /Akun/.)
Saya menghadapi masalah yang sama karena saya MVC project dikonfigurasi untuk .Net 4.5 tetapi saya menggunakan .Net 4.0 sebagai aplikasi saya renang di IIS. Beralih ke .Net 4.5 aplikasi outdoor dan masalah itu tetap. Saya harap ini membantu beberapa orang lain!
Perlu diketahui bahwa hal ini berpotensi berbahaya saran, it's jarang ide yang baik untuk mengubah applicationhost file konfigurasi secara langsung, biasanya ada alat-alat yang akan melakukan ini untuk anda, aman (misalnya, dari dalam Visual Studio.) Sebelum melanjutkan, pastikan untuk membuat salinan cadangan dari file ini dalam acara IIS Express menjadi sampah.
Untuk memperbaiki masalah ini, saya mengambil default IIS file konfigurasi yang terletak di sini :
C:\Windows\System32\inetsrv\config\applicationHost.config
Untuk dokumen saya
%userprofile%\documents\iisexpress\config\applicationhost.config
Dan itu bekerja.
Ini adalah karena saya memiliki beberapa Windows Authentification set dan bukan akun anonim.
Aku memecahkan masalah yang sama berkat ini jawaban yang diterima: https://stackoverflow.com/questions/23107030/asp-net-login-redirect-loop-when-user-not-in-role.
Adalah mungkin bahwa controller yang mengandung Login tindakan yang dihiasi dengan AuthorizeAttribute
(bahkan satu kustom) saat login tindakan ini tidak dihiasi dengan AllowAnonymous
atribut. Menghapus AuthorizeAttribute
dari controller dan menambahkan AllowAnonymous
untuk login tindakan dapat menjadi solusi yang mungkin.
Jawaban-jawaban ini kurang lebih potongan-potongan dari teka-teki yang sama; aku'll mencoba untuk meletakkan segala sesuatu di satu tempat. Masalah yang OP dijelaskan hit aplikasi saya saat saya menerapkan OWIN pipa dan AspNET Identitas.
Jadi let's melihat bagaimana untuk memperbaikinya...
Saya kira anda perlu ini, karena jika anda don't, maka anda don't membutuhkan otentikasi, dan saya kira anda lakukan. Kecuali itu anda're menggunakan beberapa gaya lama otentikasi, dan saya kira anda don't. Jadi, don't menghapus baik OWIN startup atribut...
[assembly: OwinStartupAttribute(typeof(YourApp.Probably_App_Start.SomethingLikeAuthConfig))]
...atau konfigurasi garis...
<add key="owin:AppStartup" value="YourApp.Probably_App_Start.SomethingLikeAuthConfig" />
Sekarang kita dibersihkan ini, anda memerlukan otentikasi. Ini berarti masing-masing controller anda membutuhkan [Otorisasi]
atribut, atau anda bisa melakukan hal yang sama untuk semua pengendali di satu tempat dengan mendaftarkan hal secara global (misalnya di RegisterGlobalFilters()
, tambahkan baris filter.Add(new AuthorizeAttribute())
).
Dalam kasus yang pertama (saat mengamankan masing-masing kontroler terpisah) melewatkan bagian ini, hanya pergi ke yang berikutnya.
Dalam kasus terakhir semua kontroler anda akan dijamin terhadap unauthorized acces, sehingga anda perlu entry point untuk itu izin - tidak terlindungi Login()
tindakan.
Hanya menambahkan...
[AllowAnonymous]
...dan anda harus baik.
Ketika pengguna log in, browser nya-toko dienkripsi (mudah-mudahan!) cookie dalam rangka untuk menyederhanakan hal-hal untuk sistem. Jadi, anda perlu cookie - don't menghapus baris yang mengatakan UseCookieAuthentication
.
Windows Otentikasi
(Cacat) dan mengaktifkan membiarkan setiap pengguna, setidaknya selama IIS Express sekarang yang bersangkutan, dengan menetapkan Otentikasi Anonim
(Diaktifkan).Ketika anda memulai situs web anda, ini akan mengubah salinan pengaturan ini ke IIS Express konfigurasi (applicationhost.config
), dan di sana anda akan melihat dua baris:
<windowsAuthentication enabled="false" />
<anonymousAuthentication enabled="true" />
menyangkal pengguna="?"
. Itu berarti otorisasi subsistem diinstruksikan untuk mencegah pengguna anonim masuk.
Dengan OWIN, ini masih bekerja seperti yang dirancang. Anda juga harus menghapus, atau membuat anda anonim pengguna dapat mengakses halaman Login dengan menggunakan sesuatu seperti...`
HTH
Aku punya masalah yang sama di mana itu dalam loop tak terbatas ketika menelepon kembali ke situs web lokal. Ternyata bahwa ketika debugging lokal itu mengarahkan port. Aku diperbarui nomor port dalam proyek properti layar tetapi meninggalkan Azure definisi yang sama di awan proyek dan segala sesuatu mulai bekerja seperti yang diharapkan.
Saya memiliki masalah yang sama dengan saya Asp.Net MVC 4 proyek. Saya memutuskan itu dengan pergi ke Startup.cs dan komentar keluar garis untuk ConfigureAuth(app)
public void Configuration(IAppBuilder app)
{
//ConfigureAuth(app);
}
Saya juga memastikan bahwa saya memiliki Windows Otentikasi diaktifkan di IIS untuk proyek saya, dan semua lainnya otentikasi pilihan dinonaktifkan.