Il problema: Quando vengono creati nuovi pool di applicazioni IIS e impostati per utilizzare l'identità del pool di applicazioni per le autorizzazioni, non sono sicuro come aggiungere tali identità a gruppi di utenti come Amministratore o contatore di prestazioni.Assegnazione programmatica di "utenti" di identità applicazione IIS ai gruppi
Sfondo: Attualmente sto scrivendo una libreria .NET C# che utilizza Microsoft.Web.Administration al fine di effettuare le seguenti operazioni:
- Rileva se è installato IIS 7.x, e se quindi, quali componenti.
- Installare o aggiornare IIS 7.x in un elenco fornito di componenti richiesti.
- Creare/gestire uno o più siti Web tramite IIS.
- automaticamente creare/gestire un pool di applicazioni per ogni sito web
Il contesto è che questa libreria è per essere utilizzato da installatori eseguibili per fornire distribuzione automatizzata di un server Web e siti web/servizi su sistemi operativi Windows Server come parte di una più ampia distribuzione del software. Finora, tutto quanto sopra è stato implementato, testato ed è (soprattutto) funzionale tranne che per l'automazione di alcune autorizzazioni che devono essere eseguite sul pool di applicazioni/creazione di siti web.
Nel mio metodo per l'installazione di un nuovo sito web, creo un nuovo pool di applicazioni e costringerlo a utilizzare il pool di applicazioni:
static public void InstallSite(string name, string path, int port)
{
Site site;
var appPoolName = ApplicationPoolBaseName + name;
using (var iisManager = new ServerManager())
{
// Set up a custom application pool for any site we run.
if (!iisManager.ApplicationPools.Any(pool => pool.Name.Equals(appPoolName)))
{
iisManager.ApplicationPools.Add(appPoolName);
iisManager.ApplicationPools[appPoolName].ManagedRuntimeVersion = "v4.0";
}
iisManager.CommitChanges();
}
// ... other code here ('site' gets initialized) ...
using (var iisManager = new ServerManager())
{
// Set anonymous auth appropriately
var config = iisManager.GetWebConfiguration(site.Name);
var auth = config.GetSection("system.web/authentication");
auth.SetMetadata("mode", "Windows");
var authSection = config.GetSection("system.webServer/security/authentication/anonymousAuthentication");
authSection.SetAttributeValue("enabled", true);
authSection.SetAttributeValue("userName", string.Empty); // Forces the use of the Pool's Identity.
authSection = config.GetSection("system.webServer/security/authentication/basicAuthentication");
authSection.SetAttributeValue("enabled", false);
authSection = config.GetSection("system.webServer/security/authentication/digestAuthentication");
authSection.SetAttributeValue("enabled", false);
authSection = config.GetSection("system.webServer/security/authentication/windowsAuthentication");
authSection.SetAttributeValue("enabled", false);
iisManager.CommitChanges();
}
// ... other code here ...
}
Da quanto ho capito, questa sarebbe la migliore pratica di sicurezza, e Aggiungerei quindi le autorizzazioni a siti Web specifici per qualcosa di più che un accesso minimo al sistema. Parte di questo processo consisterebbe nell'aggiungere queste identità del pool di applicazioni a gruppi di utenti, come ad esempio gli utenti di Amministratore o Performance Monitor. È qui che sorgono le complicazioni.
Ora, come documented elsewhere, ogni Identità pool di applicazioni esiste nel formato IIS AppPool\\<pool_name>
ma questo finto-utente non è elencato attraverso i normali controlli di gestione GUI, e non sembra essere accessibile attraverso le biblioteche, come System.DirectoryServices.AccountManagement
quando segue this example on SO . Inoltre, altre domande sull'identità del pool di applicazioni sembrano correlate a referencing it from within a child website, non da un contesto di installazione.
Così, qualcuno sa quali sono i metodi propri sono per
- a) Riferimenti e l'accesso Application Pool Identities di programmazione.
- b) Fornire le autorizzazioni di identità del pool di applicazioni aggiungendole Gruppi di utenti.
Ho intenzione di provare a scambiare la mia soluzione per questo per riprodurre i risultati. Questo sembra promettente, grazie per la condivisione! – jmsb