Mengarahkan Otentikasi Windows ke halaman 401 khusus

Kami mengonversi beberapa aplikasi web kami yang dulunya berjalan di bawah autentikasi formulir, kini dijalankan sebagai autentikasi windows. Saya ingin membuat ulang keamanan halaman yang dimiliki bentuk otentikasi dengan modifikasi minimal pada halaman sebenarnya. Saya dapat menciptakan kembali efek yang saya inginkan, dengan aplikasi web yang disederhanakan. Saya menjalankan aplikasi pada pipa terintegrasi Server 2008 R2 IIS 7.5.

Saya membuat aplikasi 3 halaman sederhana menggunakan otentikasi windows. Ketiga halaman tersebut adalah:

  • Openpage.aspx, yang terbuka untuk semua pengguna yang diautentikasi
  • Blockedpage.aspx yang diblokir untuk semua pengguna (simbol dari direktori atau halaman yang akan diblokir untuk sebagian pengguna berdasarkan peran pengguna)
  • ErrorPage.aspx, jika halaman yang diblokir.aspx diakses (dan ditolak) aplikasi harus meneruskan ke ErrorPage.aspx di mana pengguna mendapatkan informasi umum tentang aplikasi tersebut.

Web.Config untuk aplikasi:

<configuration>
    <system.web>
        <compilation debug="true" targetFramework="4.0" />
      <authentication mode="Windows"/>
      <authorization>
        <deny users="?" />
        <allow users="*" />
      </authorization>
    </system.web>
  <location path="blockedpage.aspx">
    <system.web>
      <authorization>
        <deny users="*"/>
      </authorization>
    </system.web>
  </location>
  <system.webServer>
   <httpErrors errorMode="Custom" >
      <remove statusCode="401" subStatusCode="-1" />
      <error statusCode="401" path="/development/simplesecurityapp/errorpage.aspx" responseMode="ExecuteURL" />
    </httpErrors>

    <validation validateIntegratedModeConfiguration="false" />
    <defaultDocument>
      <files>
        <clear />
        <add value="openpage.aspx" />
      </files>
    </defaultDocument>
  </system.webServer>

</configuration>

(Jika saya tidak mencoba mengalihkan kesalahan 401 di tingkat asp.net, saya hanya mendapatkan "pesan tidak resmi" standar yang bukan merupakan efek yang ingin saya berikan kepada pengguna saya.)

Namun, saya mendapatkan pesan kesalahan yang tidak saya mengerti – setiap kali server direset, aplikasi berhenti bekerja. IIS hanya mengembalikan kesalahan 401 hingga browser memunculkan kontrol login manual, yang tidak dapat dipenuhi. (Saya tidak ingin pengguna saya disajikan dengan perintah masuk browser)

Namun, jika saya mengganti bagian httperrors setelah aplikasi disiapkan (baik dengan mengedit konfigurasi web, atau memperbaruinya dengan GUI server) menghapus bagian tersebut, mengakses halaman, dan kemudian menambahkan kembali bagian tersebut, aplikasi mulai berfungsi seperti yang diharapkan, dan terus berlanjut hingga server di-boot ulang, yang pada saat itu server mulai memberikan pop-up login manual lagi kepada pengguna, yang tidak dapat mereka atasi.

1) Apakah ini cara yang benar untuk mengamankan aplikasi dengan otentikasi windows (adakah cara yang lebih baik untuk mengonfigurasi direktori yang tidak dapat diakses seperti di formulir, namun masih menyediakan halaman kesalahan khusus?)

2) Apakah ini merupakan dampak dari jalur pipa yang terintegrasi dan mengapa cara kerjanya seperti ini?


person Jim    schedule 30.01.2012    source sumber


Jawaban (1)


Anda mencoba menyediakan konten melalui pesan kesalahan transportasi.

Formulir memungkinkan Anda melakukan ini karena terdiri dari lapisan 7, seperti 302 dan 200. 401 ditafsirkan oleh browser klien sebagai "server tidak menyukai kredensial saya, jadi buka kotak dialog untuk meminta yang baru".

Halaman yang diautentikasi menghasilkan setidaknya 1 401 untuk diautentikasi; bahwa Anda membebani "kesalahan" secara berlebihan untuk hal lain mungkin merupakan akar masalahnya.

Saya tidak yakin ada cara elegan untuk melakukan apa yang Anda inginkan.

person TristanK    schedule 13.03.2012