44

ログインページ、css ファイル、および js ファイルにいくつかのインクルードがあります。

<link rel="stylesheet" type="text/css" href="../../ext/resources/css/ext-all.css" />
<script type="text/javascript" src="../../ext/bootstrap.js"></script>

残念ながら、ブラウザがこれらに対して行うリクエストは 302 レスポンスを受け取ります。Forms Auth はリクエストを無許可と見なし、ログイン ページにリダイレクトしています。そもそもリクエストがログインページからのものであることを認識していません。

GET http://localhost:50880/ext/resources/css/ext-all.css HTTP/1.1

HTTP/1.1 302 Found
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="/Account/LogOn?ReturnUrl=%2fext%2fresources%2fcss%2fext-all.css">here</a>.</h2>
</body></html>

インクルード フォルダー (ext) のアクセス許可を全員に設定すると役立つかもしれないと考えました。

私は他のプロジェクトでこの問題を抱えていません。

4

5 に答える 5

74

私も同じ問題を抱えていました。これが私がそれを解決した方法です。

IIS7では、Webサイトをクリックしてから、[認証]ボタンをダブルクリックします。[匿名認証]をクリックしてから、右側の[編集...]リンクをクリックします。[アプリケーションプールID]チェックボックスがオンになっていることを確認してください。

私のアプリケーションプールは、(「ApplicationPoolIdentity」ではなく)「NetworkService」ユーザーの下で実行されています。IISのアプリケーションプールの詳細設定でIDを選択できます。このユーザーには、Webサイトのファイルシステムへのフルアクセスが許可されています。

于 2012-05-31T13:44:49.393 に答える
31

設定ファイルで次のように、cssファイルとイメージが認証されるのを除外する必要があります。locationタグを使用すると、単一のファイルまたはディレクトリを除外できます。

<location path="<RELATIVE_PATH_OF_YOUR_RESOURCE_FILES>">
    <system.web>
        <authorization>
            <allow users="*"/>
        </authorization>
    </system.web>
</location>
于 2011-06-10T09:44:02.710 に答える
7

So, here's what I did that entirely solved the issue.

First, I made the change to the web.config like everyone else said to do.

IIS で匿名認証を使用しています。この問題で説明したように、IIS > アプリケーション プール > アプリケーション プールを右クリック > 編集 > アプリケーション プール ID を使用するようにアプリケーション プールを変更しました。

THEN - 自分のサイトを含む親フォルダーに移動し、そのフォルダーのアクセス許可に入り、サーバーの NETWORK SERVICE アカウントを追加してフォルダーにアクセスしました。それは私のためにそれをしました。これは、アプリケーション プールが ApplicationPoolIdentity (ローカル コンピューターのネットワーク サービス アカウント) で実行されているためです。

これが誰かを助けることを願っています!

于 2012-03-29T14:16:20.253 に答える
5

私がこれに関して抱えていた問題は、インターネットからjqueryプラグインをダウンロードし、それをWebサーバーのコンテンツディレクトリにコピーし、Windowsがその下のすべてのファイルをブロックして、Webサーバーが正しくアクセスできないようにしたことでした。Windowsでファイルのブロックを解除すると、問題が解決しました。

于 2012-07-13T05:21:16.293 に答える
2

ここでの回答が遅れましたが、この IISsue に光を当てたいと思いました。(私が何をしたかわかりますか?)

まず、David Conlisk の答えは、必ず頭の中にあるものを修正する答えであると言いたいです。しかし、あなたが私のようで、匿名認証 ID が IUSR に設定されているフォームと匿名認証を使用して多くのアプリケーションを展開していて、突然この問題が発生した場合は、私がどのように問題を再現したかを聞いてください。同じ苦境を免れた。


私の標準的な方法は、Web アプリケーションの AppPoolIdentity をNetwork Serviceとして実行することです。次に、仮想ディレクトリが指しているディスク上の実際のディレクトリに移動します->右クリック->プロパティ->セキュリティタブ->編集->ネットワークサービスユーザーの追加->読み取り/書き込み権限を付与します。

次に、必要なディレクトリ (js、css など) で匿名認証を有効にします。既定では、アプリ プール ID は IUSR です。

わかった。私の開発環境で突然、すべてのcssとjsで302フォーム認証リダイレクトを取得し始めました! どうしたの?Web アプリケーションで SVN をソース管理の別のブランチに切り替えました。うーん。それは、すべての単一ファイルのディスク上のアクセス許可をすべて完全にジャックしました。私がこれまでに修正できた唯一の方法は、Web アプリ全体を削除し、新たにチェックアウトして、ネットワーク サービスの読み取りアクセス許可を再適用することです (または、すべてのファイルにアクセス許可を適用します... はい、試しました親レベルのフォルダーのアクセス許可を削除して再度追加します)。

そこで今回は、「どうしようもありません。Web アプリをLocal Systemとして実行しています。これにより、上司のディスクのアクセス許可が表示されます。これは、短期的な回避策として時々うまくいきました。」しかし、残念ながら、今日ではありません。私の目の前で、まったく同じ構成のフォーム認証 Web アプリの 2 つの展開を見ていることを誓います。302 問題は私の開発マシンでのみ再現されます。唯一の違いは、私のマシンの最近の SVN スイッチです。

ログインして Forms Auth Cookie を取得するとすぐに、js と css が正常にダウンロードされます。


我慢してください、私は衝撃的な発見をしました。これを展開したすべてのサーバーには、MACHINE_NAME\Users に付与された読み取り権限があります。そして、私の開発マシンはそうではありません。それを開発マシンに追加すると、cssをダウンロードできました。


TLDR;

ストーリーの教訓は、匿名認証 ID を IUSR として保持できることですが、その場合、ディスク上の Web アプリに対する読み取りアクセス許可をすべてのユーザーに付与する必要があります。

これは (セキュリティ上の理由から) 悪い考えであるため、David C の回答を採用し、匿名認証 ID をアプリケーション プール ID として実行することを新しい習慣にします。

于 2016-01-27T22:51:43.170 に答える