2012-03-29 10 views
6

Estoy usando la clase ServerManager (desde Microsoft.Web.Administration) para crear aplicaciones en un servidor que ejecuta IIS 7. Deseo configurar si la aplicación usa autenticación anónima o autenticación de Windows en base a una aplicación, así que no puedo simplemente pedirle a TI que cambie la configuración en el sitio raíz. El contenido de la aplicación pertenece a un tercero, por lo que no puedo cambiar el archivo web.config dentro de la aplicación.Configure los ajustes de autenticación IIS utilizando la clase ServerManager

La clase Application no expone ninguna propiedad útil, pero ¿podría hacer algo con el método GetApplicationHostConfiguration de ServerManager?

Respuesta

9

Parece que espera alterar la configuración del sistema de información de Internet para el sitio; Si eso es correcto algo como esto debería funcionar:

using (ServerManager serverManager = new ServerManager()) 
{ 
    Configuration config = serverManager.GetWebConfiguration("Contoso"); 
    ConfigurationSection authorizationSection = config.GetSection("system.webServer/security/authorization"); 
    ConfigurationElementCollection authorizationCollection = authorizationSection.GetCollection(); 

    ConfigurationElement addElement = authorizationCollection.CreateElement("add"); 
    addElement["accessType"] = @"Allow"; 
    addElement["roles"] = @"administrators"; 
    authorizationCollection.Add(addElement); 

    serverManager.CommitChanges(); 
} 

El código anterior permitirá crear una regla de autorización que permite a un usuario en particular en un grupo para acceder a un sitio en particular. En este caso, el sitio es Contoso.

Esto deshabilitará la autenticación anónima para el sitio; a continuación, habilitar básico & autenticación de Windows para el sitio:

using(ServerManager serverManager = new ServerManager()) 
{ 
    Configuration config = serverManager.GetApplicationHostConfiguration(); 

    ConfigurationSection anonymousAuthenticationSection = config.GetSection("system.webServer/security/authentication/anonymousAuthentication", "Contoso"); 
    anonymousAuthenticationSection["enabled"] = false; 

    ConfigurationSection basicAuthenticationSection = config.GetSection("system.webServer/security/authentication/basicAuthentication", "Contoso"); 
    basicAuthenticationSection["enabled"] = true; 

    ConfigurationSection windowsAuthenticationSection = config.GetSection("system.webServer/security/authentication/windowsAuthentication", "Contoso"); 
    windowsAuthenticationSection["enabled"] = true; 

    serverManager.CommitChanges(); 
} 

O simplemente puede añadir una cuenta de usuario del Administrador de IIS si lo desea; que puede configurar con ciertos permisos para manipular y administrar esas otras aplicaciones.

using (ServerManager serverManager = new ServerManager()) 
{ 
    Configuration config = serverManager.GetAdministrationConfiguration(); 

    ConfigurationSection authenticationSection = config.GetSection("system.webServer/management/authentication"); 
    ConfigurationElementCollection credentialsCollection = authenticationSection.GetCollection("credentials"); 
    ConfigurationElement addElement = credentialsCollection.CreateElement("add"); 
    addElement["name"] = @"ContosoUser"; 
    addElement["password"] = @"[email protected]"; 
    addElement["enabled"] = true; 
    credentialsCollection.Add(addElement); 

    serverManager.CommitChanges(); 
} 

Hay mucha flexibilidad dentro del Sistema de información de Internet; es bastante poderoso. La documentación a través de la referencia también es bastante profunda. Los ejemplos son bastante ineptos para adaptarse a su uso particular o al menos proporcionar un nivel de comprensión para que haga lo que quiera.

Esperemos que la ayuda, esos ejemplos vinieron de here:

Cuestiones relacionadas