9

Aquí está el fondo. Tenía un proyecto de .NET MVC v1.0 que intentaba asegurarlo usando el modo de autenticación de Windows. Así que me puse el web.config a:El modo de autenticación de Windows en ASP.NET utiliza el nombre de grupo de Active Directory (previo a Windows 2000)?

<authentication mode="Windows" /> 

Y luego fui a mi controlador y hice lo siguiente:

[Authorize(Roles="IT")] 
public class LicenseController : Controller 

En el año tenemos un grupo llamado "IT" y yo soy muchos otros son aparte de este grupo. Una vez que tuve esto en su lugar, comencé una sesión de depuración e intenté ir a cualquiera de las acciones en ese controlador y me encontré con un 401. Busco alto y bajo buscando un lugar donde haya atornillado al perro y no haya podido encontrar nada incorrecto. Después de un tiempo de lucha decidí intentar cambiar el "Autorizar" a un usuario específico y ver si funcionaba. Así que lo cambié a lo siguiente:

[Authorize(Users="domain\\tnederveld")] 

Y bajo y he aquí que funcionó. Así que fui y agregué un grupo diferente del que era miembro y saqué la declaración autorizar de los usuarios y funcionó. Comencé a buscar las diferencias entre los dos grupos de AD y lo único que era diferente fue en el segundo grupo que probé con el "Nombre de grupo (anterior a Windows 2000):" eran lo mismo. Los grupos "IT" "Nombre del grupo (anterior a Windows 2000):" eran "Asociados de TI". Así que traté de cambiar la declaración de autorizar a:

[Authorize(Roles="IT Associates")] 

Y comenzó a funcionar. Estaba seguro de que se trataba de un problema de MVC, por lo que me aseguré de probarlo en un proyecto regular de Web Forms y me encontré con el mismo problema.

El verdadero truco es que cuando utiliza el UserPrincipal que forma parte de System.DirectoryServices.AccountManagement, devuelve el grupo "IT" cuando utiliza el método .GetGroups().

¿Por qué está sucediendo esto?

+0

Terry, si desea incluir XML o fragmentos de código en su publicación (¡buena idea!), Debe resaltar esas líneas y luego usar el botón "código" (101 010) en la barra de herramientas del editor (o presionar Ctrl-K) para formatearlos apropiadamente. –

Respuesta

3

que necesita para mantener separados los distintos nombres una entrada en la EA puede tener:

  • el nombre por sí suele ser el atributo CN - el nombre común. Esta es la parte "CN = xxx" en su cadena LDAP. Aquí es IT - y eso es lo System.DirectoryServices.AccountManagement volverá - es el "Active Directory" 's nombre más común

  • la 'asocia' nombre es anterior a Windows 2000 o sAMAccountName - la cosa de Windows NT solía usar antes de que hubiera AD: un nombre de usuario y/o grupo local (SAM = Administración de cuentas de seguridad o algo así). El nombre de la cuenta de SAM debe ser único por dominio, incluso en un gran bosque de AD actualmente.

Por desgracia, muchas de las llamadas a la API de Windows son todavía se basa en que el nombre - ya que son (y deben ser) compatible con versiones anteriores de Windows. El sistema de suscripción de ASP.NET utiliza esas llamadas y por lo tanto va a utilizar su nombre de usuario y domain/tnederveldIT Associates grupo - esos son los nombres de cuenta SAM de sus objetos

No estoy seguro si hay mucho que se pueda hacer al respecto - acaba de ser conscientes de que en un entorno de AD, cualquiera de sus usuarios o grupos tiene una plétora de "nombres"; siempre tenga muy claro de qué está hablando.

Para obtener una lista detallada de todos los atributos de AD, consulte Richard Mueller's excellent web site con Active Directory reference material.

+0

Tiene sentido completo, gracias por responder. –

Cuestiones relacionadas