2012-03-29 2 views
6

Ich verwende die ServerManager-Klasse (von Microsoft.Web.Administration) zum Erstellen von Anwendungen auf einem Server mit IIS 7. Ich möchte konfigurieren, ob die Anwendung anonyme Authentifizierung oder Windows-Authentifizierung verwendet auf einer Anwendungsbasis, also kann ich nicht einfach von IT verlangen, die Einstellungen auf der Root-Site zu ändern. Da der Inhalt der Anwendung einem Dritten gehört, darf ich die Datei web.config in der Anwendung nicht ändern.Konfigurieren Sie IIS-Authentifizierungseinstellungen mithilfe der ServerManager-Klasse

Die Application-Klasse stellt keine nützlichen Eigenschaften zur Verfügung, aber vielleicht könnte ich etwas mit der GetApplicationHostConfiguration-Methode des ServerManagers erledigen?

Antwort

9

Es klingt wie Ihre Hoffnung, die Internet-Informationssystemkonfiguration für die Site zu ändern; wenn das richtig so etwas wie dies sollte funktionieren:

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(); 
} 

Der obige Code ermöglicht es Ihnen, eine Berechtigungsregel zu erstellen, die einen bestimmten Benutzer in einer Gruppe eine bestimmte Website zugreifen kann. In diesem Fall ist die Site Contoso.

Dann deaktiviert dies die anonyme Authentifizierung für die Website; dann Grund & Windows-Authentifizierung für die Website aktiviert:

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(); 
} 

Oder Sie können einfach ein IIS-Manager-Benutzerkonto hinzufügen, wenn Sie mögen; Sie können bestimmte Berechtigungen festlegen, um diese anderen Anwendungen zu bearbeiten und zu verwalten.

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(); 
} 

Es gibt eine Menge Flexibilität im Internet Information System; Es ist ziemlich mächtig. Die Dokumentation durch diese Referenz ist auch ziemlich ausführlich. Die Beispiele sind ziemlich unpassend, um an Ihre spezielle Verwendung angepasst zu werden oder zumindest ein Verständnisniveau zu bieten, damit es das macht, was Sie wollen.

Hoffentlich diese Hilfe, diese Beispiele kamen von here:

Verwandte Themen