Windows/.NET Security: Как из SID получить WindowsPrincipal?
От: alexanderfedin США http://alexander-fedin.pixels.com/
Дата: 08.05.13 00:49
Оценка:
Пишу прототип тулзы, которая проверяет правильность настроек 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);
    }
}



Что я делаю неправильно?
Respectfully,
Alexander Fedin.
.net application pool security windows sid principal
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.