Answering my own question... my initial approach was wrong. There is no way of passing the token as a query parameter to the Flex Viewer app.
The solution was to have my application proxy requests from the Flex Viewer application - I just copied the proxy.config and proxy.ashx files to the root of my app.
The user first authenticates via the web app (forms authentication), and then a link to the Flex Viewer is loaded. The map service requests are sent from the Flex Viewer to my web application (had to configure the Flex Viewer and widgets to use a proxy). The web app then checks that the user is authenticated, before dynamically requesting a token from ArcGIS to accompany the original map service request.