web-dev-qa-db-ja.com

フォーム認証リダイレクトのcss / scriptインクルードがHTTP 302でログインページに含まれます

ログインページ、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応答を受け取ります。フォーム認証はリクエストを無許可と見なし、ログインページにリダイレクトします。そもそもリクエストがログインページからのものであることを理解していません。

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>

おそらく、includesフォルダー(ext)のアクセス許可をすべてのユーザーに設定すると役立つと思います。

他のプロジェクトではこの問題は発生していません。

43
Dan Revell

構成ファイルで次のようにして、cssファイルとイメージを認証から除外する必要があります。ロケーションタグを使用すると、単一のファイルまたはディレクトリを除外できます。

<location path="<RELATIVE_PATH_OF_YOUR_RESOURCE_FILES>">
    <system.web>
        <authorization>
            <allow users="*"/>
        </authorization>
    </system.web>
</location>
31
PSK

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

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

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

72
David Conlisk

だから、これが問題を完全に解決した私がしたことです。

最初に、他の人が言うようにweb.configに変更を加えました。

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

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

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

7
vcuankit

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

5
MikeD

ここでは遅い答えですが、このIISsueに光を当てるのを手伝いたいと思いました。 (私がしたことを見てください?)

まず、私はデビッド・コンリスクの答えが確かな決断であるということを言いたいと思います。しかし、あなたが私のようなもので、フォームと匿名認証を使用して多くのアプリケーションをデプロイし、匿名認証IDがIUSRに設定されており、突然この問題が発生した場合の場合は、私は問題を再現し、うまくいけば同じ窮状から免れることができます。


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

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

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

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

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


私と一緒に耐えて、私は衝撃的な発見をしました。これをデプロイしたすべてのサーバーにはMACHINE_NAME\Usersに付与された読み取り権限があります。そして、私の開発マシンはそうではありません。それを開発マシンに追加すると、CSSをダウンロードできました。


TLDR;

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

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

2
C. Tewalt