2012-01-30 12 views
5

フォーム認証で実行していたWebアプリケーションの一部をWindows認証として実行しています。私は、実際のページを最小限に変更して認証を形成するページセキュリティを再現したいと考えています。私は単純化されたウェブアプリで、私が望む効果を再現することができました。私はServer 2008 R2統合パイプラインIIS 7.5でアプリケーションを実行しています。Windows認証をカスタム401ページにリダイレクト

Windows認証を使用して簡単な3ページのアプリケーションを作成しました。 3つのページがあります:

  • Openpage.aspx、それはユーザーのサブセットにブロックされるディレクトリやページのシンボリックすべてのユーザー(にブロックされている任意の認証されたユーザー
  • Blockedpage.aspxに開いていますユーザーの役割に基づいて)
  • ErrorPage.aspx、blockedpage.aspxがアクセスされ(拒否された場合)、アプリケーションはErrorPage.aspxに転送して、ユーザーがアプリケーションに関する一般的な情報を取得する必要があります。

アプリのweb.config:

<configuration> 
    <system.web> 
     <compilation debug="true" targetFramework="4.0" /> 
     <authentication mode="Windows"/> 
     <authorization> 
     <deny users="?" /> 
     <allow users="*" /> 
     </authorization> 
    </system.web> 
    <location path="blockedpage.aspx"> 
    <system.web> 
     <authorization> 
     <deny users="*"/> 
     </authorization> 
    </system.web> 
    </location> 
    <system.webServer> 
    <httpErrors errorMode="Custom" > 
     <remove statusCode="401" subStatusCode="-1" /> 
     <error statusCode="401" path="/development/simplesecurityapp/errorpage.aspx" responseMode="ExecuteURL" /> 
    </httpErrors> 

    <validation validateIntegratedModeConfiguration="false" /> 
    <defaultDocument> 
     <files> 
     <clear /> 
     <add value="openpage.aspx" /> 
     </files> 
    </defaultDocument> 
    </system.webServer> 

</configuration> 

(私はasp.netレベルで401エラーをリダイレクトしようとしない場合、私はちょうど標準の「許可されていないメッセージ」を取得これは私のユーザーに与えたいという効果ではありません)。

しかし、私は理解していないエラーが発生しています - サーバーがリセットされるたびに、アプリケーションが動作しなくなります。ブラウザが手動ログイン制御をポップアップするまで、IISは単に401エラーを返します。これは満足できません。 (ユーザーにブラウザのログインプロンプトを表示させたくない)

ただし、Web設定を編集するか、サーバーのGUIで更新することで、httperrorsセクションを置き換えた場合)セクションを削除し、ページにアクセスしてからセクションを追加すると、アプリケーションは予期したとおりに動作し、サーバーが再起動されるまで継続します。このとき、ユーザーは手動ログインポップアップを再び開始します。解決できません。

1)は、Windows認証(フォームのようにアクセスできないディレクトリを設定するためのより良い方法があるが、それでもカスタムエラーページを供給?)

2)でアプリを確保するための正しい方法はこれです。これは、統合されたパイプラインの効果と、なぜこのように動作していますか?

答えて

1

トランスポートエラーメッセージでコンテンツを提供しようとしています。

フォームでは、302と200などのレイヤー7のもので構成されているため、これを行うことができます。 401sはクライアントブラウザによって解釈されます。「サーバーは自分の資格情報が気に入らなかったので、新しいものを要求するダイアログボックスを表示します。

認証されるページには、認証されるために少なくとも1 401が生成されます。おそらく問題の根源になるでしょう。

私はあなたが望むことをするエレガントな方法があるとは思っていません。

関連する問題