の問題は、私は多言語サイトのURLを書き換えるためにHttpModuleをを使用しています。 HttpModuleでは、BeginRequestイベントのハンドラを追加し、カルチャ名を含むパスの最初の部分を探します。.NET URLは、フォーム認証とloginUrl
は、例えば、/fr-ca/index.aspxは、これが正常に動作します3084.にスレッドの文化やUIの文化を/index.aspxして設定する書き換えられます。
は、フォーム認証を入力します。フォーム認証はマップされていないURLでも正常に動作しますが、ユーザーが権限がない場合は、web.configの認証セクションで設定されたloginUrlにリダイレクトされ、?ReturnUrl = querystringパラメータが含まれているため、ユーザーが認証されると
ユーザーがデフォルト以外の言語でページを要求した場合、ここで二つの問題があります。
- loginUrlはそれが
- 書き換えられていますにreturnurlパラメータはまた、生のパスを無視する前にパスを無視しますが。
これは、Request.RawUrlではなくRequest.Url.PathAndQueryと同じです。
私は、複数の場所のパスを持つ1つのweb.configファイルを使用していますので、私は、すべての可能な文化値から保護する必要があると思いますので、私が代わりにAuthorizeRequestイベントでパイプラインにジャンプすることはできません。これも最初の問題は修正されません。
私は反射鏡でFormsAuthenticationModuleを経てきたと私は#1と#2を解決するために、それを変えることができる場所を私は見たが、それはもちろん、密閉されています。
また、私はたくさんの周りを閲覧しましたが、私は、任意の実行可能な解決策を参照することはできません。
FormsAuthenticationModuleはUrlAuthorizationModuleで生成されます401ヘッダをチェックします。 loginUrlページで参照元(空の場合)を検索すると、それが確認されます。
どのような考えですか?
EDIT#1
私は、IIS 6を使用していて、IIS 7はオプションではありません。
EDIT#2
私はローカルリソース(デザインビュー:[ツール]> [ローカルリソースの生成)を生成したときので、ログインページがデフォルトの文化/ UIカルチャを拾っていなかった、IDEは次を追加しました
文化= "auto" のメタ:pageディレクティブにたResourceKey = "PageResource1" uiculture = "auto" の
vs.net 2008年にはこれに注意してください!少なくともこれは参照されていない既定の文化に関する問題の1つを解決しますが、#1と#2は未だに優れています。私は自分のリダイレクトを行うためにパイプラインのイベントの一つに飛び込むが、System.Web.Securityを反映してできることを期待し
EDIT 3
。UrlAuthorizationModule OnEnterメソッドを使用して、401ヘッダーが設定されると、メソッドがapplication.CompleteRequestを呼び出すことがわかりました。これは、あなたが推測できるように、EndRequestイベントにわかります。これはFAモジュールがリダイレクトにジャンプしたものです。私は自分のリダイレクトを行うために前に飛び越えることはできません!この問題を抱える人が増えていないのは驚いています。
例:私は物理的なフォルダ/メンバーにメンバーのセクションを持って
/それは、フォーム認証で保護されています。 web.configファイルで
、私が持っている:
<authentication mode="Forms">
<forms loginUrl="~/members/login.aspx" timeout="40" />
</authentication>
と...
<location path="members">
<system.web>
<authorization>
<deny users="?" />
<allow roles="Members" />
<deny users="*" />
</authorization>
</system.web>
</location>
認証されていないユーザーは、の/メンバー/インデックスページを要求すると、それらはloginUrlにリダイレクトしますFormsAuthenticationModuleによって上記の認証セクションから取得します。また、要求されたページに?ReturnUrlパラメータを追加します。
ユーザーは既定のカルチャを使用してウェブサイトを閲覧している場合、これはうまく動作しますが、私のHttpModuleを、パスの最初の部分でのカルチャ名の存在に基づいて文化を設定します。
ので、/fr-ca/members/index.aspxは/members/index.aspxに書き直さ取得し、フランス語(カナダ)への文化/ UIカルチャを設定します。不幸にも、FormsAuthenticationModuleは元のURLではなく、書き換えられたURLを使用してloginUrlページにユーザーを送ります。したがって、文化の設定が失われ、リダイレクトURLが正しくありません。
私は手動でのログインフォームにリダイレクトを行っていると考えることができる唯一のことについて@グレッグ
私は問題が何であるかを正確に理解することができないと認めなければなりません。おそらくいくつかのサンプルデータが役立つでしょうか? – Greg
上記の情報を少し追加しました。希望が役立ちます。 – ScottE
それはそれをもっと分かりやすくしました。 – Greg