Пишу прототип тулзы, которая проверяет правильность настроек AppPools веб аппликаций.
Создаю Microsoft.Web.Administration.ServerManager, получаю от него коллекцию ApplicationPools, прохожу по всем пулам.
Одна из проверок — это узнать, что юзер, под которым пул работает, имеет необходимые привилегии.
У пула есть атрибут "applicationPoolSid" (коллекция ApplicationPool.Attributes), который содержит текстовый SID (пример: S-1-5-82-562124556-1566511573-358154180-2258186165-724205732).
Создаю по этому SID экземпляр SecurityIdentifier, вызываю SecurityIdentifier.Translate в NTAccount.
Значение NTAccount.Value получается примерно таким: "IIS APPPOOL\AtHoc Default Pool".
Документация говорит, что такого плана юзер создаётся для каждого созданного AppPool.
Дальше по тексту. Валится на попытке создания WindowsIdentity.
Такой код не работает:
using (var serverManager = new Microsoft.Web.Administration.ServerManager())
{
foreach (var pool in serverManager.ApplicationPools)
{
var sidAttr = pool.Attributes["applicationPoolSid"];
var securityIdentifier = new SecurityIdentifier((string)sidAttr.Value);
var account = (NTAccount)securityIdentifier.Translate(typeof(NTAccount));
var identity = new WindowsIdentity(account.Value); // Здесь падает!
var principal = new WindowsPrincipal(identity);
principal.IsInRole(WindowsBuiltInRole.User);
}
}
Что я делаю неправильно?
Здравствуйте, alexanderfedin, Вы писали:
A> var identity = new WindowsIdentity(account.Value); // Здесь падает!
Единственный
конструктор WindowsIdentity, принимающий string, вроде как ожидает
the format username@domainname.com, in other words, an email address.
Здравствуйте, pugv, Вы писали:
P>Здравствуйте, alexanderfedin, Вы писали:
A>>P> var identity = new WindowsIdentity(account.Value); // Здесь падает!
P>
P>Единственный конструктор WindowsIdentity, принимающий string, вроде как ожидает
P>P>the format username@domainname.com, in other words, an email address.
Это я и сам выяснил уже. Кто-нибудь знает, откуда мне достать пользователя?