2009-08-30 15 views
19

ほとんどの場合、私のwebappは何かをするために認証が必要です。認証を受けずにアクセスできるようにするためのホームページがいくつかあります。FormsAuthenticationを使用してURLに匿名アクセスを許可するにはどうすればよいですか?

具体的には、私はこれらのURLへの匿名アクセスを許可したいと思います:

/home 
/default.aspx 

私はasp.net MVCとをFormsAuthenticationを使用しています。両方のURLが同じビューを指しています:

/home/index.aspx 

ここはweb.configの現在の設定です。認証タグのドキュメントを読む

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/LogOn" timeout="2880" />  
</authentication> 
<authorization>   
    <deny users="?" />  
</authorization> 

、それは「URLリソースへのクライアントアクセスを制御し、Webアプリケーションの認証を設定します。」と言います認可タグを使用してURLを指定し、アクセスを許可する必要があるようです。以下のような

何か:

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/LogOn" timeout="2880" />  
</authentication> 

<authorization>   
    <deny users="?" />  
</authorization> 

<authorization url="/default.aspx">   
    <allow users="?" />  
</authorization> 

<authorization url="/home">   
    <allow users="?" />  
</authorization> 

答えて

39

私は自分の質問に答えることを憎むが、私はそれを考え出す終わるなかったので、私は私が知識を共有したいと把握。

locationタグを使用して、allowタグとdenyタグを正しい順序で配置します。

ロケーションタグを使用して、特定のURLリソースを設定できます。私の場合、私はいくつかのURLとフォルダを具体的に設定したいと思っていました。

私は正しい順序で許可/拒否していないため、これは最初は機能しませんでした。 MSDNによると、「認可モジュールは、最初に見つかったアクセスルールが許可ルールか拒否ルールかに応じて、URLリソースへのアクセスを許可または拒否します。

私の場合は、私のすべてのパブリックアイテム(default.aspx、home、styles、images、scripts)を最初に置く必要があり、それ以外はすべて拒否しました。私は最後の場所タグのパスを外した。これにより、すべてのファイルとサブフォルダに適用されます。

エンド結果、ユーザーは、ホームページに取得した画像やスタイルを引き上げたが、他のすべてはログインする必要があります用することができます

ここで私のWeb設定ファイルは今だ:。

<!--AUTHORIZATION AND AUTHENTICATION RULES--> 
    <location path="default.aspx"> 
    <system.web> 

     <authorization> 
     <allow users="?"/> 
     </authorization> 
    </system.web> 

    </location> 

    <location path="Home"> 
    <system.web> 

     <authorization> 
     <allow users="?"/> 
     </authorization> 
    </system.web> 

    </location> 

    <location path="Styles"> 
    <system.web> 

     <authorization> 
     <allow users="?"/> 
     </authorization> 
    </system.web> 

    </location> 

    <location path="Scripts"> 
    <system.web> 

     <authorization> 
     <allow users="?"/> 
     </authorization> 
    </system.web> 

    </location> 

    <location path="images"> 
    <system.web> 

     <authorization> 
     <allow users="?"/> 
     </authorization> 
    </system.web> 

    </location> 

    <location allowOverride="true"> 
    <system.web> 
     <authentication mode="Forms"> 
     <forms loginUrl="~/Account/LogOn" timeout="2880" slidingExpiration="true" /> 
     </authentication> 
     <authorization> 
     <deny users="?" /> 
     </authorization> 
    </system.web> 
    </location> 

    <!--END AUTHORIZATION AND AUTHENTICATION RULES--> 
+13

なぜ謙虚とCW?あなた自身の質問に答えて解決策を投稿すると、自分自身を助けるだけでなく、他人を助けることになります。誇りを持ってチェックしてください。参加していただきありがとうございます。 –

+0

私は本当に複数のもっともらしい答えを検索した後、昨日約3時間この苦労しました。それはすべての違いを作りだしたようで、それを強調してくれた多くの感謝でした。投稿していただきありがとうございます。 – nealkernohan

+0

MVC 4では、必要なコントローラにユーザを許可するだけで済みます。スタイル/スクリプト/ etcへの特別なアクセスを追加する必要はありません。フォルダはすでに完了しています。また、配置したオーバーライドの内容をメインのsystem.webノードに移動します。 –

関連する問題