I've implemented this method in the past, so I just share my code with you:
add:
private void AddAuthorizedType(SPWebApplication webApplication, string assembly, string namespace_)
{
SPSecurity.RunWithElevatedPrivileges(delegate
{
var modification = new SPWebConfigModification();
modification.Path = "configuration/System.Workflow.ComponentModel.WorkflowCompiler/authorizedTypes";
modification.Name = string.Format("authorizedType[@Assembly='{0}'][@Namespace='{1}'][@TypeName='*'][@Authorized='True']", assembly, namespace_);
modification.Sequence = 0;
modification.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode;
modification.Value = string.Format("<authorizedType Assembly='{0}' Namespace='{1}' TypeName='*' Authorized='True'/>", assembly, namespace_);
webApplication.WebConfigModifications.Add(modification);
webApplication.Update();
webApplication.Farm.Services.GetValue<SPWebService>().ApplyWebConfigModifications();
});
}
and remove:
private void RemoveAuthorizedType(SPWebApplication webApplication, string assembly, string namespace_)
{
SPSecurity.RunWithElevatedPrivileges(delegate
{
SPWebConfigModification configMod = null;
var modsCollection = webApplication.WebConfigModifications;
// Find the most recent modification of a specified owner
foreach (SPWebConfigModification modification in modsCollection)
{
if (modification.Name.Equals(string.Format("authorizedType[@Assembly='{0}'][@Namespace='{1}'][@TypeName='*'][@Authorized='True']", assembly, namespace_), StringComparison.OrdinalIgnoreCase))
{
configMod = modification;
}
}
if (configMod != null)
{
// Remove it and save the change to the configuration database
modsCollection.Remove(configMod);
webApplication.Update();
// Reapply all the configuration modifications
webApplication.Farm.Services.GetValue<SPWebService>().ApplyWebConfigModifications();
}
});
}
NOTE: make sure this feature has web application scope, because if not, your code may not work, due to RemoteAdministratorAccessDenied settings.