Asp.Net Webforms安全性 - 将应用程序转移到.Net 4

时间:2011-01-18 00:21:34

标签: webforms applet forms-authentication asp.net-3.5 asp.net-4.0

我已经将.Net 3.5中的WebForms应用程序移动到.Net 4.唯一的变化是web.config删除了3.5扩展,因为它们现在是.Net 4的一部分。

我在使用FormsAuthentication和自定义主体安全的站点中有以下applet标记(Persists software JUpload control):

<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。这两个cookie参数用于确保用户的SessionId和FormsAuthTicket在上传时由上传小程序发送。

正如我所说,这在.Net 3.5(CLR 2.0)中完美运行。转移到.Net 4,CLR4,似乎发生的事情是/site/ManageDocumentsPost.aspx的请求被重定向到登录页面,然后控件显示此假定上传正常。帖子页面实际上从未实际执行过它的代码(帖子应该不返回任何内容,从而导致控件要求FinalUrl)。

使用Fiddler我可以看到manageDocumentsPost导致重定向,并且此重定向具有不同的Asp.Net SessionId。

任何可能导致此变化的想法?更重要的是,任何让它再次运作的想法?

由于 安迪

1 个答案:

答案 0 :(得分:0)

好的,我想出了如何让它发挥作用。

之前我将主体存储在会话中,并加载到AquireSessionState事件中。

现在我在登录期间将主体存储在缓存中,并将一些信息写入故障单,以便我在缓存中找到它。

在AuthenticateRequest事件中,如果用户经过身份验证,我可以轻松找到实际的主体并从缓存中获取。由于某种原因,虽然控件导致此事件触发未经身份验证,但会话和formsauthcookie都存在于请求中。我解密了auth cookie,然后使用故障单中的信息再次找到委托人。

通过这种方式,用户可以在事件处理程序结束时进行身份验证,一切都可以正常进行。

希望能帮助别人。