同じ仮想ディレクトリの下の同じサーバーで実行されているASP.NETWebサービスにWebサービス要求を行おうとしているASPファイルがあります。IIS仮想ディレクトリは匿名アクセスを無効にするように設定され、「統合Windows認証」がオンになっています。
したがって、問題は、ユーザーのマシンがASPページを実行するか、WebService.asmx .NETファイルを手動で実行することを要求すると、ユーザーの資格情報が渡されるために機能しますが、= ASPファイルが401.2を取得するWebサービスを呼び出そうとします-未承認:サーバー構成のためにアクセスが拒否されました。
例えば:
そのため、WebService.asmxにNTFSアクセス許可を設定して、ASPアカウントの読み取りと実行のアクセス許可を許可する必要があると思いましたが、どのアカウントで実行されているのかわかりません。一部の応答では、NTFSレベルに到達していないようです。匿名アクセスがオフになっているため、IISは要求を完全に拒否しています。
これは、ドメインアカウントでASPプロセスを実行する必要があることを示していますか?
クラシックASPは、HTTPセッションでサーバーに対して認証されたユーザーになりすまして実行されます。認証を行っているユーザーに、従来のASPアプリケーションの実行権限を付与するか、匿名アクセスを許可する必要があります。
「AuthenticatedUsers」をすでに試しても機能しない場合は、ファイルのアクセス許可の問題は発生していないと言えます。
「...ASPファイルがWebサービスを呼び出そうとしています...」とはどういう意味ですか? ASPスクリプトがサーバーにHTTPリクエストを返していると言っていますか?その場合、「統合Windows認証」では、他のサーバー(またはそれ自体)への認証時に使用するプレーンテキストのパスワードがサーバーに提供されないため、ユーザーの資格情報はその要求で渡されません。
編集:
あなたのコメントによると、上記のように、統合Windows認証はサーバーに他のサーバー(またはこの場合は別のサーバー)に渡すプレーンテキストのパスワードを与えないため、サーバーにはユーザーを認証するための資格情報がありません)。
あなたが試すことができる3つのこと:
WebService.asmxを取得して、サーバー自体への匿名アクセスを許可できる場合は、HTTP呼び出しが機能するはずです(IUSR_xxxにファイルの読み取りを許可することにより、匿名アクセスを明示的に許可する必要がありますおよび " IIS管理コンソールスナップインを介したファイル自体の「匿名アクセス」の「匿名アクセスと認証制御」設定。これは、そのファイルが有効な「統合Windows認証」と無効な「匿名アクセス」設定を継承するためです。それが入っているディレクトリから)。
HTTPリクエストの送信に使用しているコントロールが、ログインしたユーザーの資格情報をリモートサーバーに透過的に提供することをサポートしている場合は、従来のASPスクリプトで「基本認証」を有効にできます(これにより、他のサーバーに渡すプレーンテキストパスワードをサーバーに設定します)。これにより、HTTPリクエストコントロールは、WebService.asmxのリクエスト中にそのプレーンテキストパスワードを渡すことができます。プレーンテキストのパスワードをネットワークから切り離すために、その時点で、従来のASPスクリプトへのアクセス時にSSLを要求する必要があります。
最後に、従来のASPスクリプトでいくつかの基本認証資格情報をハードコーディングし、WebService.asmxファイルで基本認証を有効にすることができます。つまり、WebService.asmxは常に同じユーザーからのアクセスを確認します。
それらのどれも非常に素晴らしい解決策ではありません。クラシックASPスクリプトを実行するために認証したユーザーとして、バックエンド層(データベースなど)に対して認証しようとしたときに、「クラシックASP」で見られた「クラシック」問題が発生しています。 。
統合認証がオンで、ユーザーがWindows統合認証を実行するブラウザーを使用している場合およびユーザーは1つのWebサーバーに変換するアカウントとしてログインします(たとえば、クライアントマシンがオンになっている) Webサーバーと同じドメイン)スクリプトはそのユーザーのアカウントとして実行されます。
上記のいずれかが偽の場合(サーバーがクライアントブラウザとユーザーアカウントを合意できない場合)、匿名のユーザーとして設定したものは何でも使用されます。IUSR_<machine>
デフォルトで、または匿名ブラウジングが無効になっている場合、ユーザーは401. *エラーを受け取ります。
これは、他の認証意見がオフになっていることを前提としています。 Windows統合認証スキームと基本認証スキームの両方を同時に有効にしている場合、何が優先されるかわかりません。
Reqeust.servervariablesコレクションを照会し、関連する値を出力するスクリプトをドロップすることで、Webサーバーが特定の領域への要求に現在使用しているユーザーを確認できます。ユーザー名はそこにあります。
「ダブルホップ」認証を実行しようとしているようです。通常、これはバックエンドSQLサービスのコンテキストで発生しますが、同じサーバーで実行されている別のサービスに適用される可能性があります(ただし、100%確実ではありません)。 MSKBで「ダブルホップ」という用語を検索すると、これが機能するように委任を設定する方法を説明するドキュメントがいくつか表示されます。まず、 http://support.Microsoft.com/kb/326985
必要なのは、IISサーバーを「委任を許可」に設定することです。ユーザーがWindows統合認証を介して認証されると、Kerberosチケットを取得する必要があります(これは、次の場合は機能しません)。 NTLM認証の取得)。
委任を行うには、サーバーにSPNを追加する必要があります。サーバーがADでSPNを持っている実際のFQDNを使用してユーザーがWebページにアクセスしていることを確認してください。サービスプリンシパル名(SPN)は、ユーザーKerberosエージェントが適切なKerberosチケットを作成するために使用するものであり、IISサーバーは、次のサービスに要求を渡すときにユーザーになりすますことができます。 。
Webサービスがログインしたユーザーの資格情報を使用することは重要ですか? MSXML2.ServerXMLHTTPRequestなどを使用してWebサービスを呼び出す場合、.Openメソッドで資格情報を指定するだけで、固定された資格情報のセットをWebサービスに提供できますか?