1

一般情報

オペレーティング システム: Windows Server 2003 R2 サービス パック 2

ウェブサーバー: IIS 6

NTAuthenticationProviders : NTLM のみ

Web アプリケーション: クラシック ASP

使用ブラウザ:IE7、IE8、IE9

eblcplaza / knowledgebase / .

eblcplaza には匿名アクセスがあり、統合 Windows 認証が有効になっています。ナレッジベースでは、匿名アクセスが無効になっており、統合 Windows 認証が有効になっています

ナレッジベースは、事前定義されたアプリケーション プール ID「ネットワーク サービス」の下で実行される独自のアプリケーション プールを持つクラシック ASP アプリケーションです。</p>

NT アカウントでログインすると、必要なページに問題なくアクセスできます。問題は WinHttp.WinHttpRequest.5.1 コンポーネントにあります。Web アプリケーション内に存在するいくつかの .asp スクリプトからコンテンツを取得するためのサーバー側要求を実行するために、ナレッジベースの一部で使用されます。

問題は、ナレッジベースで匿名アクセスがオフになったときに始まりました。 、オンに戻すことはオプションではありません。

WinHttpRequest を使用したリクエストの例:

set WinHTTPRequest = Server.CreateObject("WinHttp.WinHttpRequest.5.1")

WinHTTPRequest.SetTimeouts 20000, 20000, 20000, 20000

call WinHTTPRequest.Open("POST", someUrlToAspScript, false) 

WinHTTPRequest.SetAutoLogonPolicy 0                 

WinHTTPRequest.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"

WinHTTPRequest.Send strQueryString

Response.Write(WinHTTPRequest.ResponseText)

SetAutoLoginPolicy を 0 に設定すると、WinHttpRequest が使用されているページで次のエラー メッセージが表示されます。

指定した資格情報を使用してこのディレクトリまたはページを表示する権限がありません。HTTP エラー 401.1 - 権限がありません: 資格情報が無効なため、アクセスが拒否されました。インターネット インフォメーション サービス (IIS)

SetAutoLoginPolicy を 2 (MSDN に従ってユーザー資格情報を自動的に送信しない) に設定すると、WinHttpRequest が使用されているページで次のエラー メッセージが表示されます。

Web サーバーが受け入れるように構成されていない WWW-Authenticate ヘッダー フィールドを Web ブラウザーが送信しているため、指定した資格情報を使用してこのディレクトリまたはページを表示する権限がありません。HTTP エラー 401.2 - 権限がありません: サーバーの構成が原因でアクセスが拒否されました。

私の NT ユーザー アカウントには、これらの .asp スクリプトにアクセスするための適切な権限があり、ネットワーク サービス アカウントにも同様の権限があることはわかっています。

NTAuthenticationProviders を NTLM のみに設定し、Negotiate と NTLM の両方に設定しようとしましたが、これまでのところ何も機能しませんでした。

私を助けてください、それは私を夢中にさせ始めています。

よろしく、

バート

4

2 に答える 2

0

まず、サーバーに何を求めているのかを明確にしましょう。セキュリティの目的で、現在あなたになりすましているクライアントにあなたの資格情報を要求します。クレデンシャルを要求するサービス(WinHTTPはまったく同じアプリケーションであることを認識していません)に対して行っているWinHTTP要求。このなりすましスレッドに実行させたいのは、資格情報を使用して「外部」サービスに対して認証することです。

ここで起こっていることは、サーバーがこの方法でクレデンシャルを再利用するためにクリアされていないことだと思います。私が正しく思い出せば(それは確かではないかもしれませんが)、それを行うためにサーバーに委任する権利を与える必要があります。NTLMの代わりにKerberosを使用してWindows統合セキュリティを実行する場合は、これを許可することもできます。

しかし、それはすべて学術的なものかもしれません。httpリクエストを行うアプリは、リリースするためにリサイクルが必要になるような方法で、負荷がかかっているときにハングする可能性があることを理解する必要があります。

この代替案を検討してください。ServicePage.aspがブラウザと内部ClientPage.aspの両方で直接使用されるページであるとすると、次のようになります。

ServicePage.aspからサービスコードを取り出し、新しいServiceInclude.aspのVBScriptクラスに配置します。次に、このServiceInclude.aspをServicePage.aspのインクルードファイルとして追加します。ServicePage.aspには、クラスをインスタンス化し、それを使用して出力を生成するために必要な配管のみが含まれています。

ClientPage.aspを変更して、WinHttpをServicePage.aspに試行する代わりに、ServiceInclude.aspを含め、含まれているクラスをインスタンス化し、そのクラスを使用して必要なサービスを提供するようにします。

于 2012-05-31T21:29:42.223 に答える
0

ナレッジベースのページは、eblcplaza から開始した匿名アカウントでアクセスされていると思います。リクエストを使用するeblcplazaのページでのみNTLMを有効にしてみてください。そのファイルでのみ有効にできます。そのように、資格情報がナレッジベースに渡されます。両方のページで、Session("username") 変数をログに記録します。

于 2012-05-31T19:54:18.903 に答える