Learned something interesting today about how Azure handles federation for an Azure Web Role. I thought Web.config was no longer applicable for Azure Web applications now that ServiceConfig.cscfg exists. I was wrong.
In the Azure Portal I configured an Access Control Service (ACS) namespace along with Identity Providers, Rules, and Relying Party for my Azure Web application. In Visual Studio for my Azure ASP.NET Web role I chose “Add STS Reference” to invoke the Federation Utility Wizard. Went through all the dialogs to successfully link my app to the ACS Namespace I had created. Opened up the ServiceConfiguration.cscfg file to view the changes made by the wizard — and there was none. Snooping around I opened up Web.config and found a number of entries written by the Federation Utility Wizard. I thought the ServiceConfiguration.cscfg file was to replace Web.config for Azure-only applications. So how would these become visible to the ServiceConfiguration.cscfg file? How would my Azure application make use of these settings in the Web.config file?
Here’s how it works. Federation support in ServiceConfiguration.cscfg file is not implemented as of yet. For now, Azure will use the entries in Web.config to manage federation of an application using ACS. If you need to change values in Web.config relating to federation after the Azure Web app has been deployed without having to repackage and redeploy, here is a tip on how to do that.
Duplicate the settings found in Web.config in ServiceConfiguration.cscfg. (Note you also have to duplicate those in the ServiceDefinition.csdef for them to be able to be valid in the cscfg file). In the OnStart method when your Azure Web role first loads have code to read the federation elements from the ServiceConfiguration.cscfg. That code can then in turn write those values out to their matching elements in the Web.config file. The Web.config file handles the actual federation not the ServiceConfig.cscfg file. The role of the ServiceConfig.cscfg relating to Web.config in this case is to act as a conduit in case federation values need to be changed in the Web.config file of a deployed Azure Web application. This can be done by uploading an updated ServiceConfig.cscfg file in the Azure portal without redeploying the entire application.