3

書き直したURL(例:Scott Guthrieのブログから)とフォーム認証/承認を使用して簡単なサンドボックステストを行っています。書き直したURLでのフォーム認証/承認の使用

私は非常に簡単な設定をしました。

~/View/(\d{1,6})  =>  ~/Public/View.aspx?ContentID=$1 

~/Buy/(\d{1,6})  =>  ~/Private/Purchase.aspx?ContentID=$1 

私は、URL書き換えが別々に以下の

次の私は、web.configファイル、それらの2つのディレクトリのための私のフォーム認証/承認を行って、有効。セットアップ

<location path="Private"> 
    <system.web> 
     <authorization> 
     <deny users="?" /> 
     </authorization> 
    </system.web> 
    </location> 
    <location path="Public"> 
    <system.web> 
     <authorization> 
     <allow users="*" /> 
     </authorization> 
    </system.web> 
    </location> 

私は2元のURL(の.aspxの)を参照したときにこれは完璧に動作 に従いますが、私はURL書き換えのバージョンを参照するときは全く発生しませんよう。

私は別々にBuyため<location>セクションを追加しようとしましたが、これはまだでキックする認可/認証モジュールを起こすことができない。

それはASPXリソースとしてこれらのURLを処理されていないので、おそらくこれは..です。私は

<LookFor>~/Buy/(\d{1,6})\.aspx</LookFor> 

すなわち最後にASPXを持つように書き換えられたバージョンを強制するために書き換えルールの外観を作ることによって、それを回避することができますが、これは単に醜いようです。 拡張子に関係なく、任意のURLタイプに対して認証ハンドラを起動させる方法はありますか(または存在しないか)

+0

スコット・ガスリーは、あなたが使用している1、4つの異なるアプローチを概説しますか? http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx – MyItchyChin

答えて

2

組み込み認証を使用するには、元の「生の」URLまたは書き換えられたURL。認証が既に実行された後、使用しているURLリライタがイベントに接続されているように見えます。そのため、「Public」と「Private」フォルダルールのみが実行されています。書き換えられたURLに基​​づいて認証したい場合は、以前のイベント(BeginRequestなど)に接続し、web.configを書き換えたURLで更新するリラ​​イタを使用する必要があります。

また、独自の認証プロバイダをプラグインして、書き直したURLと元のURLの両方を確認するなどの工夫をすることもできますが、これはおそらくサンドボックスのテストサイトでは過度のものです。

詳細については、こちらの記事を参照してください:

http://msdn.microsoft.com/en-us/library/ms972974.aspx

私はこのことができます願っています。

0

ASP.NET 4.0(3.5 SP1と思われます)には、新しいルーティング機能が含まれています。このルーティング機能を使用する利点は、ASP内で直接サポートされることです。したがって、ルートが実行されたときに、実際の.ASPXファイルの認可設定を尊重するように指定することができます。

代わりにこのルーティング機能を実装できるかどうか調査することをおすすめします。

0

あなたが使っているライブラリを書いているURLはっきりしませんが、見た目からはおそらくurlrewriter.netだと思いますが、タグはありませんか?

0

すべての要求にをFormsAuthenticationと許可を有効にしてみてください。デフォルトでは、.aspxのようなasp.net要求に対してのみ有効です。 は(7)IISで行うことができ、または直接ウェブサーバ/ modulesセクションでweb.configファイルに

<system.webServer> 
    <modules> 
     <remove name="FormsAuthentication" /> 
     <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" preCondition=""/> 
     <remove name="UrlAuthorization" /> 
     <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" preCondition="" /> 
    </modules> 
</system.webServer> 
関連する問題