Pregunta

Quiero agregar la cuenta IUSR a ese grupo de administradores en mi aplicación WinForms. El siguiente código falla porque no puede encontrar un usuario para "NT Authority IUSR":

 DirectoryEntry AD = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer");
 DirectoryEntry administrators = AD.Children.Find("Administrators", "group");
 DirectoryEntry iusr = AD.Children.Find(@"NT AUTHORITY\IUSR", "user");

 administrators.Invoke("Add", new object[] {iusr.Path.ToString()});

Me doy cuenta de que esta es una mala idea. Estoy haciendo esto porque estoy escribiendo una aplicación WinForms que crea programáticamente un nuevo sitio web en IIS7 solo para fines de desarrollo. El sitio web se está creando correctamente, sin embargo, ASP.NET muestra el error "El acceso se niega" cada vez que intento cargar una página. Cuando agrego IUSR al grupo de administradores, todo funciona bien. ¿Qué más puedo intentar? A continuación se muestra el código que estoy usando para crear el nuevo sitio web:

Site site = servermgr.Sites.Add(websitename, physicalpath, port);
Binding binding = site.Bindings.CreateElement();
string bindinginfo = "*:" + port.ToString() + ":" + hostipaddress;

binding.Protocol = "http";
binding.BindingInformation = bindinginfo;
site.Bindings.Clear();
site.Bindings.Add(binding);

site.Applications.Add(applicationpath, applicationphysicalpath);

site.ApplicationDefaults.ApplicationPoolName = "Default";

servermgr.CommitChanges();
¿Fue útil?

Solución

La solución correcta es requerir autenticación para la página. Esto luego solicita el navegador para que lo inicie; Si utiliza una cuenta adecuada, la página podrá crear el nuevo sitio web.

IIS7 le permite configurar esto desde (por ejemplo) ApplicationHost.Config, mientras que las versiones anteriores le exigieron editar la metabase (generalmente de IIS Manager).

Editar: dependiendo de la autenticación, el navegador y la configuración de la red, es posible organizar que el navegador inicie sesión automáticamente en la página utilizando su cuenta de dominio.

Otros consejos

DirectoryEntry AD = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer");
DirectoryEntry administrators = AD.Children.Find("Administrators", "group");

administrators.Invoke("Add", new object[] {"WinNT://NT AUTHORITY/IUSR"});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top