Situs ASP.NET MVC yang memungkinkan pengguna anonim tetapi ketika login berjalan sebagai identitas AD pengguna yang login?

Saya memiliki situs ASP.NET MVC 5 yang menggunakan otentikasi formulir melalui kelas keanggotaan khusus.

Prosedur login situs saya:

  1. Pengunjung anonim mencoba menavigasi ke situs saya. Dia diizinkan melakukannya, tetapi dialihkan ke halaman login saya.

  2. Pengunjung memasukkan nama pengguna dan kata sandinya, yang dikonfigurasi di direktori aktif (AD) jaringan saya.

  3. Kode .NET AD memvalidasi kredensial, kemudian merespons dengan cookie untuk pengunjung yang berisi info dasar (namanya, alamat email, dll).
  4. Pengunjung diarahkan ke halaman beranda. Dia diautentikasi, tetapi situs tersebut sebenarnya berjalan sebagai identitas kumpulan aplikasinya, bukan identitas AD pengguna yang masuk.

Masalah saya: Di #4, bagaimana cara membuat identitas situs saya dijalankan sebagai identitas AD pengguna yang diautentikasi, dan bukan identitas kumpulan aplikasi situs? Saya perlu melakukan ini karena layanan tertentu yang digunakan aplikasi saya memerlukan identitas pengguna AD, bukan identitas kumpulan aplikasi.

Solusi yang mungkin: Di #2, saya mendapatkan nama pengguna dan kata sandi pengunjung dan menggunakannya untuk mengautentikasi bahwa dia adalah identitas AD yang valid. Saya dapat mengenkripsi dan menyimpan kata sandi pengguna, lalu kapan pun saya perlu menggunakan layanan yang memerlukan identitas AD pengguna, saya dapat membuat NetworkCredential baru dari nama pengguna dan kata sandinya. Saya tidak menyukai solusi ini, karena saya lebih suka tidak menyimpan kata sandi pengguna, jika saya bisa menghindarinya.

Terima kasih atas bantuannya!


person David Alan Condit    schedule 19.04.2019    source sumber
comment
Anda perlu menggunakan peniruan identitas. Saya telah membuat banyak aplikasi seperti itu. Gunakan peniruan identitas sepanjang waktu atau hanya selama diperlukan. Semakin pendek, semakin baik untuk tujuan keamanan. Lihat pertanyaan atau riset ini secara online.   -  person CodingYoshi    schedule 19.04.2019
comment
Jika saya menggunakan peniruan identitas untuk waktu yang singkat, saya perlu menyimpan kata sandi pengguna ke cookie-nya (terenkripsi) sehingga saya dapat meniru identitasnya ketika saya perlu menggunakan layanan yang memerlukannya. Kalau tidak, bagaimana saya bisa meniru seluruh sesinya? Dari saat dia masuk hingga saat dia keluar atau cookie-nya habis masa berlakunya?   -  person David Alan Condit    schedule 19.04.2019
comment
Lihat apa manfaatnya bagi Anda: (System.Security.Principal.WindowsIdentity)User.Identity dan Anda akan mengerti maksud saya.   -  person CodingYoshi    schedule 19.04.2019
comment
Itu hanya mengembalikan identitas anonim. Web.config saya adalah ini, jadi mungkin saya salah bicara saat mengatakan itu formulir autentikasi. Ini pada dasarnya berfungsi seperti autentikasi formulir tetapi secara teknis ditetapkan sebagai Windows. IIS mengaktifkan Identitas Windows, Peniruan Identitas, dan Anonim. Hubungkan apa adanya sebagai identitas kumpulan aplikasi. ‹mode autentikasi=Windows›‹/autentikasi› ‹identitas peniru=benar /›   -  person David Alan Condit    schedule 19.04.2019
comment
Saya yakin yang Anda maksud sebenarnya adalah ini: var currentWindowsIdentity = System.Security.Principal.WindowsIdentity.GetCurrent();, yang mengembalikan MyADDomain\MyAppPoolIdentityName.   -  person David Alan Condit    schedule 19.04.2019
comment
Apakah Anda melakukan penelitian? Silakan lihat ini.   -  person CodingYoshi    schedule 19.04.2019
comment
Ya. Dari tautan pertama Anda, sepertinya saya perlu mengkonfigurasi server IIS saya untuk delegasi, sehingga kredensial AD pengunjung dapat diteruskan. Mungkin solusi yang lebih baik adalah ini, yang sepertinya memungkinkan saya menyamar sebagai pengguna menggunakan nama utama penggunanya. Saya tidak perlu menyimpan kata sandinya dengan cara ini.   -  person David Alan Condit    schedule 19.04.2019
comment
Saya tidak pernah menyimpan kata sandi.   -  person CodingYoshi    schedule 19.04.2019