DirectoryServices и UnauthorizedAccessException
От: Abuserrr  
Дата: 14.10.09 13:55
Оценка:
Пытаюсь создать сайт в IIS с помощью кода в asp.net приложении. Выкидывает ошибку UnauthorizedAccessException, хотя логин и пароль задаю верный. Что может быть не так? (если поставить <identity impersonate="true"/> и виндовс аутентификацию, то работает с тем же логином и паролем. но этот путь неприемлим ) Заранее благодарен.
Код ниже:


public string CreateSite(string SiteName, string SitePath, string p_Port)
    {
        string l_Login = tbLogin.Text.Trim();
        string l_Password = tbPassword.Text.Trim();
        DirectoryEntry l_Parent;
        DirectoryEntry l_NewSite;
        l_Parent = new DirectoryEntry("IIS://LOCALHOST/W3SVC", l_Login, l_Password);
        long Index = 1;
        foreach (DirectoryEntry Child in l_Parent.Children)
        {
            if (Child.SchemaClassName == "IIsWebServer")
            {
                Index = Index + 1;
            }
        }
        //Create Web Site
        l_NewSite = l_Parent.Children.Add(Index.ToString(), "IIsWebServer");
        
        l_NewSite.Username = l_Login;
        l_NewSite.Password = l_Password;
        l_NewSite.Invoke("SetInfo");//возникает ошибка UnauthorizedAccessException!
        

        l_NewSite = new DirectoryEntry("IIS://LOCALHOST/W3SVC/" + Index.ToString(), l_Login, l_Password);
        l_NewSite.InvokeSet("ServerComment", SiteName);
        l_NewSite.InvokeSet("KeyType", "IIsWebServer");
        l_NewSite.InvokeSet("ServerBindings", string.Format(":{0}:", p_Port));

        l_NewSite.InvokeSet("ServerState", 2);
        l_NewSite.InvokeSet("FrontPageWeb", 1);
        l_NewSite.InvokeSet("DefaultDoc", "Default.aspx");
        l_NewSite.InvokeSet("ServerAutoStart", 1);
        l_NewSite.InvokeSet("ServerSize", 1);
        l_NewSite.Invoke("SetInfo");
        l_NewSite = new DirectoryEntry("IIS://LOCALHOST/W3SVC/" + l_NewSite.Name, l_Login, l_Password);

        //Create Root Virtual Directory
        DirectoryEntry l_VDir = l_NewSite.Children.Add("Root", "IISWebVirtualDir");
        l_VDir.Username = l_Login;
        l_VDir.Password = l_Password;

        l_VDir.Invoke("SetInfo");
        l_VDir = new DirectoryEntry("IIS://LOCALHOST/W3SVC/" + (l_NewSite.Name + "/" + l_VDir.Name));
        l_VDir.Username = l_Login;
        l_VDir.Password = l_Password;

        l_VDir.InvokeSet("AppIsolated", 2);
        l_VDir.InvokeSet("Path", SitePath);
        l_VDir.InvokeSet("AccessFlags", 513);
        l_VDir.InvokeSet("FrontPageWeb", 1);
        l_VDir.InvokeSet("AppRoot", "LM/W3SVC/" + Index + "/Root");
        l_VDir.InvokeSet("AppFriendlyName", "Default Application");
        l_VDir.Invoke("SetInfo");
        l_VDir.Invoke("AppCreate", 1);

        //Now Save All Changes
        l_NewSite.CommitChanges();
        l_VDir.CommitChanges();

        return "Created Site with Site ID: " + l_NewSite.Name;
    }
Re: DirectoryServices и UnauthorizedAccessException
От: Abuserrr  
Дата: 15.10.09 12:36
Оценка:
Так и нету идей?

Впринципе может подойти решение дать ASP.NET юзеру права на создание сайтов. Только как это сделать?
Re[2]: DirectoryServices и UnauthorizedAccessException
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 15.10.09 17:25
Оценка:
Здравствуйте, Abuserrr, Вы писали:

A>Так и нету идей?


A>Впринципе может подойти решение дать ASP.NET юзеру права на создание сайтов. Только как это сделать?


Это делать не стоит. Вместо этого можно сварганить некий out-of-process компонент, который будет хоститься, скажем, в сервисе, и работать под учёткой с повышенными правами (да хоть под System), но недоступный извне машины. Ваш сайт при необходимости выполнить привелигированную операцию будет дёргать этот компонент за нужные нитки — для этого повышенные права не нужны... Таким образом убиваются два зайца — сайт по-прежнему работает с минимальными привилегиями, и необходимые операции безопасным образом выполняются...
[КУ] оккупировала армия.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.