Kesalahan LDAP di IIS7.5 saat menggunakan Otentikasi windows

Saya menghadapi masalah dengan LDAP, ini agak aneh. Server Web saya adalah IIS7.5 (server windows 2008 R2). Ini dikonfigurasi untuk menggunakan Otentikasi windows. Saya telah menempelkan halaman asp saya di bawah.

Browser web adalah IE8, Telah menambahkan situs web ke zona intranet dan mengaktifkan pengiriman, detail pengguna jika zona intranet di tab keamanan-> tingkat khusus. Otentikasi windows terintegrasi diaktifkan di tab lanjutan.

Semuanya berfungsi dengan baik selama 20 menit (Pengaturan waktu sesi dan pengaturan waktu habis default lainnya adalah selama 20 menit). Setelah 20 menit saya mendapatkan kesalahan runtime ASP. Yang mengatakan metode atau properti memberOf untuk objek objUser tidak didukung. Ketika saya mendapatkan kesalahan di bawah ini, saya mengubah jenis Otentikasi menjadi Otentikasi dasar. Ini meminta kredensial windows dan berfungsi dengan baik. Setelah itu saya kembali lagi ke otentikasi windows. Dan itu berhasil untuk beberapa waktu.

Tidak yakin apakah id IIS7.5 dikonfigurasi dengan otentikasi dasar diaktifkan dan IE8 dikonfigurasi seperti di atas, masih mengapa ia meminta Kredensial windows. Meskipun mode Otentikasi windows tidak meminta kredensial, Ini berfungsi dengan baik tetapi untuk jangka waktu tertentu. Adakah yang bisa menjelaskan kepada saya mengapa perilaku aneh ini dan solusi untuk memperbaikinya?

<%@ LANGUAGE="VBSCRIPT" %>
<%
 Option Explicit

Dim oADSysInfo
Dim objUser
Dim strGroupData
Dim strUserDN
 Dim arrGroups
 Dim strGroup
 Dim wsObject
 Dim netSys
 Dim strUsrDomain

 strGroupData = ""
    Set wsObject = CreateObject("WScript.Shell")
 Set netSys =   CreateObject("WScript.Network")

 strUsrDomain = netSys.UserDomain
Set oADSysInfo = CreateObject("ADSystemInfo")

 If err.number <> 0 Then
 'getLDAPGroupInfo = strGroupData
  'wsObject.popup("Error"& e.decription)
 'Exit Function
 End If
 strUserDN = oADSysInfo.UserName
 Set objUser = GetObject("LDAP://"& strUserDN)
 arrGroups = objUser.memberOf

  If IsEmpty(arrGroups) Then
  'Wscript.Echo "Member of no groups"
 ElseIf (TypeName(arrGroups) = "String") Then
  'Wscript.Echo "Member of group " & arrGroups
  strGroupData = arrGroups
 Else

  For Each strGroup In arrGroups
   strGroupData = strGroupData & "," & strGroup
 Next
  'strGroupData = arrGroups


 End If 
     Response.Write(strGroupData)
%>

person Karthik Prasad    schedule 14.06.2012    source sumber
comment
Saat menyelidiki lebih lanjut, saya perhatikan bahwa masalah terjadi setelah 20 menit karena waktu tunggu proses habis diatur ke 20 menit. Dalam log peristiwa saya menemukan bahwa acara WS, yang membaca proses pekerja dimatikan karena tidak ada aktivitas selama waktu idle yang ditentukan. Proses pekerja baru akan dibuat jika diperlukan. Dari sini saya berasumsi bahwa proses Pekerja yang dihasilkan menggunakan pengaturan yang berbeda, karena itu gagal   -  person Karthik Prasad    schedule 16.06.2012
comment
Hari ini saya mengetahui bahwa ini juga berfungsi dengan baik setelah kejadian tersebut disebutkan dalam komentar sebelumnya, jika saya mengakses situs web menggunakan localhost. Tetapi meminta kredensial (saya berasumsi otentikasi dasar aktif). Setelah itu saya bahkan dapat menggunakan aplikasi web dari browser lain dengan otentikasi windows aktif. Saya tidak yakin mana yang sebenarnya menyebabkan masalah, LDAP, IIS atau beberapa pengaturan IIS mengesampingkan pengaturan situs web saya?   -  person Karthik Prasad    schedule 18.06.2012
comment
Masalah yang disebutkan kemarin semuanya merupakan indikator masalah double-hop. Apakah ada mekanisme sederhana untuk memperbaiki masalah ini di tingkat server web dan tidak menyentuh server LDAP?   -  person Karthik Prasad    schedule 19.06.2012


Jawaban (1)


Saya menggunakan solusi yang agak sederhana.

Solusi yang saya gunakan adalah sebagai berikut.

  1. Aplikasi saya berjalan di bawah identitas pengguna tertentu (kredensial jalur fisik dan identitas kumpulan aplikasi diatur ke akun DNS)

  2. Saya membuat halaman lain dengan kode di atas dan menjalankan di bawah identitas kumpulan aplikasi (SPN) dan di sana dengan membuat kunci token utama antara server Direktori Aktif dan server Webserver

  3. Dengan menggunakan kunci itu saya kembali terhubung ke LDAP untuk menanyakan informasi terkait pengguna dengan memanggil kode di atas di bawah direktori virtual yang memiliki otentikasi windows dan dan berjalan di bawah identitas pengguna, di sana dengan mendapatkan detail pengguna.

Jika Anda menggunakan asp.net secara terprogram menyamar sebagai pengguna dan mendapatkan detail pengguna dari ldap dan saat aplikasi mulai membuat token utama dengan menghubungkan ldap, Kunci utama tetap ada hingga proses pekerja dimatikan

person Karthik Prasad    schedule 29.06.2012