0

私はアプリケーションを.Net 3.5のWebFormsから.Net 4に移動しました。唯一の変更は3.5拡張を削除するweb.configの変更でした。 .Net 4の一部です。Asp.Net Webforms security - アプリケーションが.Net 4に移動するのを壊す

私はサイトで、次のアプレットタグ(ソフトウェアJUploadコントロールを永続化)を持っているがをFormsAuthenticationとカスタムプリンシパルを使用してsecuried:

<APPLET 
    id="UploadCtl" 
    CODE="persits.transfer.gui.UploadUI.class" 
    ARCHIVE="JUpload.jar" 
    WIDTH="99%" HEIGHT="200" 
    NAME="JUpload" MAYSCRIPT="yes" 
    > 
     <PARAM NAME="cabbase" VALUE="JUpload.cab" /> 
     <PARAM NAME="UseSockets" VALUE="false" /> 
     <param name="DNDOverrideEnabled" value="true" /> 
     <PARAM NAME="ShowTransferButton" VALUE="false" /> 
     <PARAM NAME="AllowAddFiles" VALUE="true" /> 
     <param name="AllowRemoveFiles" value="true" /> 
     <param name="UploadURL" value="/site/manageDocumentsPost.aspx" /> 
     <param name="FinalURL" value="/site/manageDocuments.aspx" /> 
     <PARAM NAME="DebugInformation" VALUE="true"> 
     <param name="MaxFileSize" value="2500" /> 
     <PARAM NAME="Cookie1" VALUE="ASP.NET_SessionId=<% =SessionId %>"> 
     <PARAM NAME="Cookie2" VALUE="<%=FormsCookieName %>=<%=FormsCookieValue %>"> 
</APPLET> 

基本的にコントロールがUploadURLで指定されたURLに掲載します。 2つのクッキーパラメータは、投稿を行うときにアップロードアプレットによってユーザーのSessionIdとFormsAuthTicketが確実に送信されるようにします。

私が述べたように、これは完全に.Net 3.5(CLR 2.0)で動作します。 .Net 4、CLR4に移動すると、/site/ManageDocumentsPost.aspxへのリクエストがログオンページにリダイレクトされ、コントロールはアップロードがうまくいったと仮定してこれを表示します。ポストページは決して実際にはコードを実行しません(ポストは何も返さないので、コントロールはFinalUrlを要求します)。

Fiddlerを使用すると、manageDocumentsPostがリダイレクトを引き起こし、このリダイレクトが異なるAsp.Net SessionIdを持つことがわかります。

何が原因で変更されている可能性がありますか?もっと重要なのは、それを再び機能させるためのアイデアですか? アンディ

答えて

0

[OK]を

おかげで、私はこの作業を取得する方法を考え出しました。

以前は、プリンシパルをセッションに格納していて、AquireSessionStateイベントで読み込んでいました。

ログオン時にプリンシパルをキャッシュに保存し、キャッシュにその情報を格納できるようにするために、チケットに情報を書き込んでいます。

AuthenticateRequestイベントでは、ユーザーが認証されると、実際のプリンシパルを簡単に見つけてキャッシュから取得できます。なんらかの理由で、コントロールはこのイベントを非認証にしますが、セッションとformsauthcookieは両方ともリクエストに存在します。私は認証クッキーを解読し、チケットの情報を使ってプリンシパルを再度探します。

このようにして、ユーザーはイベントハンドラの最後で認証され、すべて正常に処理されます。

他人を助ける希望。

関連する問題