1

私はLDAPの問題に直面しています。これは少し奇妙なものです。私の Web サーバーは IIS7.5 (windows サーバー 2008 R2) です。Windows認証を使用するように構成されています。以下に自分のaspページを貼り付けました。

Web ブラウザは IE8 です。Web サイトをイントラネット ゾーンに追加し、送信を有効にしました。セキュリティ タブのイントラネット ゾーンの場合、ユーザーの詳細 -> カスタム レベル。Intigrated Windows 認証は、詳細設定タブで有効になっています。

すべてが 20 分間正常に動作します (セッション時間の設定とその他のデフォルトのタイムアウト設定は 20 分間です)。20 分後、ASP ランタイム エラーが発生します。オブジェクト objUser のメソッドまたはプロパティ memberOf はサポートされていません。以下のエラーが発生したら、認証タイプを基本認証に変更します。Windows 資格情報の入力を求めるプロンプトが表示され、正常に動作します。その後、再び Windows 認証に戻ります。そして、それはいつか働きます。

IIS7.5 id が基本認証を有効にして構成されていて、IE8 が上記のように構成されているかどうかはわかりませんが、Windows 資格情報の入力を求める理由はまだあります。Windows認証モードでは資格情報の入力を求められませんが、一定期間は問題なく動作します。この奇妙な動作とこれを修正するための解決策を説明できる人はいますか?

<%@ 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)
%>
4

1 に答える 1

0

私はかなり単純な解決策を採用しました。

私が採用した解決策は次のとおりです。

  1. アプリケーションが特定のユーザー ID で実行されている (物理パス資格情報とアプリケーション プール ID が DNS アカウントに設定されている)

  2. 上記のコードで別のページを作成し、アプリケーション プール ID (SPN) の下で実行し、そこで Active Directory サーバーと Web サーバー サーバーの間にプライマリ トークン キーを作成しました。

  3. そのキーを使用して、再度 LDAP に接続し、Windows 認証を持つ仮想ディレクトリの下で上記のコードを呼び出し、ユーザー ID の下で実行して、ユーザーの詳細を取得することにより、ユーザー関連情報を照会しました。

asp.net を使用している場合、プログラムでユーザーを偽装し、LDAP からユーザーの詳細を取得し、アプリケーションの起動時に LDAP に接続してプライマリ トークンを作成します。プライマリ キーは、ワーカー プロセスが強制終了されるまで保持されます。

于 2012-06-29T19:14:01.000 に答える