Asp.Net Webforms security - breaks app moving to .Net 4 - webforms

I've moved an application from WebForms in .Net 3.5 to .Net 4. The only change was to the web.config to remove the 3.5 extensions, since they are part of .Net 4 now.
I have the following applet tag (Persists software JUpload control) in a site securied using FormsAuthentication and a custom principal:
<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>
Basically the control will post to the url specified in UploadURL. The two cookie parameters are there to ensure that the user's SessionId and FormsAuthTicket are sent by the upload applet when doing the post.
As I stated, this works perfectly in .Net 3.5 (CLR 2.0). Moving to .Net 4, CLR4, what seems to happen is that the request for /site/ManageDocumentsPost.aspx gets redirected to the logon page, and the control then displays this assuming the upload went fine. The post page never actually executes it's code though (and the post should return nothing, thus causing the control to ask for the FinalUrl).
Using Fiddler I can see that the manageDocumentsPost causes a redirect, and this redirect has a different Asp.Net SessionId.
Any ideas what might have changed to cause this? More importantly, any ideas to get it functioning again?
Thanks
Andy

Ok, I figured out how to get this working.
previously I was storing the principal in session, and loading in the AquireSessionState event.
Now I store the principal in the cache during logon and write some information into the ticket to allow me to locate it in the cache.
In the AuthenticateRequest event, if the user is authenticated I can easily find the actual principal and get it from the cache. For some reason though the control causes this event to fire unauthenticated, but the session and formsauthcookie are both present in the request. I decrypt the auth cookie, and then use the information in the ticket to find the principal again.
In this way the user is authenticated by the end of the event handler, and everything can proceed normally.
Hope that helps someone else.

Related

How do I change agents in a Dialogflow CX Avaya integration for two different agents in a subdialog?

I have two Dialogflow agents, each one has been tested and working independently. Now I want to be able to call agent1, then pass the caller to agent2, do more processing, then pass the caller back to agent1 with the new data that agent2 had collected.
I want to leverage the Avaya-provided technology as much as possible.
Avaya Experience Portal v8.1.1
Google Dialogflow CX agents
I've tried this with a vxml subdialog (using Avaya's default/sample apps as reference) but I can't figure out how to change agent1's Conversation Profile Automated Agent string to instead be the one for agent2.
I've also thought about using one of the dialogflow API's but haven't used them before so not sure their capabilities.
Is a plain phone transfer an option in this case? Not sure how the data would get passed if I did.
Here's the form of my vxml code:
<form id="invokemainmenu">
<property name="com.avaya.asr.vendor" value="dialogflowasr"/>
<subdialog name="dialogflowapp" src="http://localhost/mpp/misc/dialogflowapp/AuthIVR811.vxml">
<param name="calledAsSubDialog" value="true"/>
<param name="sipInfoFromParent" expr="session.connection.protocol.sip"/>
<filled>
<!-- once the subdialog has been filled(completed and returns), we pass control to a different form -->
<goto next="#invokeagent2"/>
<form id="invokeagent2">
<property name="com.avaya.asr.vendor" value="dialogflowasr"/>
<subdialog name="dialogflowapp" src="http://localhost/mpp/misc/dialogflowapp/AuthIVR811.vxml">
<param name="calledAsSubDialog" value="true"/>
<param name="sipInfoFromParent" expr="session.connection.protocol.sip"/>
<filled>
<!-- process data here? -->
<prompt bargein="false">
<audio src="http://localhost/mpp/misc/dialogflowapp/prompts/test/DialogflowFinished.wav"/>
</prompt>

Windows Media Player - 500 Internal Server Error

Hi my application is MVC, have a view with windows media player, it plays on my local host but not on the hosting server, MIME is set up correct.
Here is my script:
<object codebase="http://www.apple.com/qtactivex/qtplugin.cab"
classid="clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6"
type="application/x-oleobject">
<param name="url" value="../../Video/1.wmv"/>
<embed src="../../Video/1.wmv"
type="application/x-mplayer2"
pluginspage="http://www.microsoft.com/Windows/MediaPlayer/"></embed>
</object>
I tried same script in a simple HTML file, it worked well on the server.
I get 500 Internal Server Error (shown in Fiddler). Any suggestions.
Try using a helper:
<param name="url" value="#Url.Content("~/Video/1.wmv")" />
<embed src="#Url.Content("~/Video/1.wmv")"
This will ensure that a correct url to the video file is generated. In this example I suppose that you have a Video sub-directory and the file is inside this directory.
As far as the 500 error is concerned, I suppose it is not related to the code snippet you have shown. Try looking at the server's EventLog where unhandled exceptions are traced.

How does it happen Azure web role entry point and .aspx page handler are run in different processes?

I'm playing with this Azure web role sample. It contains a class derived from RoleEntryPoint and a .aspx page that contains a button click handler.
I test it in Azure Emulator. I put the following code (taken from here)
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
in both role OnStart() and the button click handler. When role OnStart() is invoked it happens to run in WaIISHost.exe under MachineName\\MyLogin account and when button handler code is invoked it happens to run in w3wp.exe under MachineName\\NETWORK SERVICE account. That's surprising.
Why are these pieces of code from the same role project run inside different processes and under different accounts? Can I change that?
David is correct. In addition to that, you can turn off this behavior and run everything in the hostable web core (as it worked before SDK 1.4). You just need to comment out the "Sites" section in the services definition like in the example below:
<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="aExpense.Azure" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
<WebRole name="aExpense" vmsize="Medium">
<Sites>
<Site name="Web">
<Bindings>
<Binding name="HttpsIn" endpointName="HttpsIn" />
</Bindings>
</Site>
</Sites>
<ConfigurationSettings>
<Setting name="DiagnosticsConnectionString" />
<Setting name="DataConnectionString" />
<Setting name="allowInsecureRemoteEndpoints" />
</ConfigurationSettings>
With Windows Azure v1.3 and beyond, a Web Role takes advantage of the full IIS, rather than Hosted Web Core. IIS runs in a separate appdomain.
See this blog post from the Windows Azure team for the gory details.

Website makes IE8 crash

I'm having a simple but still very annoying issue and i have no idea where to start looking. Its a website i've been taking over and it crashes hard right away when opening in IE8 version 8.0.6001.18702.
The site is http://www.dhf.dk/DHF.aspx and i have to suspect some invalid manipulation of DOM but i like i said i have no idea where to start looking.
Error message is
AppName: iexplore.exe AppVer: 8.0.6001.18702 ModName: mshtml.dll
ModVer: 8.0.6001.18975 Offset: 00067838
I suspect the object-embed code to be faulty but im not hardcore enough in html to be sure if its the case
<object id="DhfSlideshow" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="610px" height="417px" codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">
<param name="movie" value="/Frontend/Flash/slideshow.swf" />
<param name="quality" value="high" />
<param name="allowScriptAccess" value="sameDomain" />
<param name="wmode" value="transparent" />
<param name="flashvars" value="dataUrl=/Frontend/DHF/DHF.Widget.Slideshows.Album/Server/DHF.Widget.Slideshows.Album.ashx?albumId=a68eae5f-955b-4ba0-aa11-6e4d68ead5df&color_scheme=/red/flash/&overviewUrl=s" />
<embed align="middle" wmode="transparent" width="610px" quality="high" height="417px" pluginspage="http://www.adobe.com/go/getflashplayer" loop="false" name="DhfSlideshow" type="application/x-shockwave-flash" flashvars="dataUrl=/Frontend/DHF/DHF.Widget.Slideshows.Album/Server/DHF.Widget.Slideshows.Album.ashx?albumId=a68eae5f-955b-4ba0-aa11-6e4d68ead5df&color_scheme=/red/flash/&overviewUrl=s" play="true" allowScriptAccess="sameDomain" src="/Frontend/Flash/slideshow.swf"></embed>
</object>
It turned out that all the other templates for the website had a <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> tag on them, and correctly... after inserting on the frontpage as well the page rendered in IE without crashing.
I can't even begin to imagine where to look, so i'll guess that has to wait until a makeover at some point.

msmdpump to SSAS

I have got msmdpump.dll set up on a windows 7 machine pointing to an SSAS instance on another server and every request I send is being logged in the event viewer with the following error.
Event ID:
10
Qualifiers:
16653
Message:
Message-handling subsystem: The message manager for the default locale cannot be found. The locale will be changed to US English
I have another msmdpump set up on that local machine as well which works perfectly but this is on windows 2003.
Full XML message
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="MSOLAP ISAPI Extension: \\?\c:\inetpub\wwwroot\olap\msmdpump.dll" />
<EventID Qualifiers="16653">10</EventID>
<Level>4</Level>
<Task>269</Task>
<Keywords>0x80000000000000</Keywords>
<TimeCreated SystemTime="2010-08-31T10:47:11.000000000Z" />
<EventRecordID>5174</EventRecordID>
<Channel>Application</Channel>
<Computer>test.local</Computer>
<Security />
</System>
<EventData>
<Data>Message-handling subsystem: The message manager for the default locale cannot be found. The locale will be changed to US English.</Data>
</EventData>
</Event>
EDIT:
Please note additionally that this call is through another data pump which can successfully connect to the SSAS instance.
EDIT2:
The error message looks to be coming from SSAS - so the request IS getting there. But it is failing on the user. Would I not appear coming through as the same user as the other data pump? Both data pumps are using Anonymous Authentication.
Actually any data on how the msmdpump.dll works would be great. All I've found is how to set it up not actually how it works.
Thanks in advance.
msmdpump translates a http request into a TCP/IP request to SSAS. I do not believe that trying to point one instance of msmdpump to another will work.

Resources