2008-09-10 13 views
8

Tenemos una aplicación ASP.NET que administra su propia base de datos de Usuario, Roles y Permisos y recientemente hemos agregado un campo a la tabla de Usuarios para mantener la cuenta de dominio de Windows.¿Cómo se obtiene la cuenta de dominio de Windows iniciada desde una aplicación ASP.NET?

Me gustaría que el usuario no tenga que físicamente iniciar sesión en nuestra aplicación, sino que se iniciaría automáticamente en función de la cuenta de dominio de Windows actualmente registrada DOMINIO \ nombre de usuario. Queremos autenticar la cuenta de dominio de Windows contra nuestra propia tabla de Usuario.

Esto es un pedazo de pastel para hacer en Windows Forms, ¿es posible hacer esto en formularios web?

no quiero que el usuario reciba un mensaje con una pantalla de desafío de Windows, quiero que nuestro sistema para manejar el registro en

Aclaración:. Estamos utilizando nuestra propia costumbre objeto principal.

aclaración: No estoy seguro de si hace una diferencia o no, pero estamos usando IIS7.

+0

He intentado todas estas opciones ... el problema es que estoy usando un objeto principal personalizado. Intenté activar la seguridad integrada y, mientras el usuario aún recibía un mensaje de inicio de sesión y una contraseña, una vez que iniciaba sesión, el Environment.UserName volvía a ser el SERVICIO DE RED. – mattruma

+0

Parece que la suplantación está deshabilitada. La suplantación le dice a ASP.NET que ejecute la solicitud en nombre del usuario autenticado. Sin él, ASP.NET ejecutará la solicitud utilizando la cuenta de servicio ASP.NET predeterminada (o SERVICIO DE RED en Windows 2003/2008). – Chris

+0

Todavía no puedo hacer esto. He intentado juguetear con la integración de IIS en vano, sigue volviendo a la cuenta de SERVICIO DE RED. ¿Hay alguna forma de que los usuarios estén ** automáticamente ** conectados según sus credenciales actuales de Windows NT? – mattruma

Respuesta

1

Hice casi exactamente lo que quiere hacer hace unos años. Estoy tratando de encontrar un código para él, aunque fue en un trabajo anterior, por lo que el código está en casa.

Recuerdo que utilicé this article como mi punto de partida. Configura el proveedor de LDAP para que pueda ejecutar una comprobación del usuario frente al LDAP. Una cosa de la que debe asegurarse si prueba el enfoque LDAP. En el archivo de configuración donde configura LDAP, asegúrese de que LDAP sea mayúscula; si no lo está, no se resolverá.

1
using System.Security.Principal; 
... 
WindowsPrincipal wp = (WindowsPrincipal)HttpContext.Current.User; 

para obtener el usuario del dominio actual. Por supuesto, debe asegurarse de que IIS esté configurado para manejar la Autenticación de Windows.

1

Esto podría ser útil:

WindowsIdentity myIdentity = WindowsIdentity.GetCurrent(); 

WindowsPrincipal myPrincipal = new WindowsPrincipal(myIdentity); 

string name = myPrincipal.Identity.Name; 
string authType = myPrincipal.Identity.AuthenticationType; 
string isAuth = myPrincipal.Identity.IsAuthenticated.ToString(); 

string identName = myIdentity.Name; 
string identType = myIdentity.AuthenticationType; 
string identIsAuth = myIdentity.IsAuthenticated.ToString(); 
string iSAnon = myIdentity.IsAnonymous.ToString(); 
string isG = myIdentity.IsGuest.ToString(); 
string isSys = myIdentity.IsSystem.ToString(); 
string token = myIdentity.Token.ToString(); 

responsabilidad: Tengo esto de un artículo de TechNet, pero no puedo encontrar el enlace.

+0

Estamos utilizando un objeto Principal e Identidad personalizado. – mattruma

0

Puede usar System.Threading.Thread.CurrentPrincipal.

+0

Estamos utilizando un objeto Principal e Identidad personalizado. – mattruma

+0

¿Por qué esto no te ayuda entonces? CurrentPrincipal devolverá el objeto principal personalizado ... –

+0

Mi principal personalizado no contiene su información de cuenta de Windows. – mattruma

0

Request.ServerVariables [ "REMOTE_USER"]

Esto no está verificado para su configuración, pero recuerdo que utiliza este un tiempo atrás.

2

La integración de este tipo está en el nivel del servidor, es IIS que decide que el usuario no ha iniciado sesión; y es IIS el que envía el mensaje de autenticación al usuario, al cual reacciona el navegador.

Como quiera utilizar el inicio de sesión del dominio, solo hay una forma de hacerlo; integrated windows authentication. Esto solo funcionará si el servidor IIS también es parte del dominio y los usuarios acceden a la máquina directamente, no a través de un proxy, y desde máquinas que también son parte del dominio (con los usuarios debidamente conectados).

Sin embargo, su objeto principal personalizado puede crear diversión y juegos; la autenticación de este tipo será WindowsPrincipal y WindowsIdentity; a la que puede acceder a través del objeto User (vea How To: Use Windows Authentication in ASP.NET 2.0)

Supongo que quiere un principal personalizado debido a sus funciones personalizadas? Dudo que puedas hacer que los dos jueguen bien; puede crear un role provider personalizado que mire su almacén de datos o mire puede mirar ADAM, una extensión de AD que proporciona funciones por programa y viene con buenas herramientas de administración.

0

Pruebe Request.ServerVariables ("LOGON_USER").

Si las opciones de seguridad del directorio están configuradas para que este directorio no permita usuarios anónimos, cuando el navegante acceda a esta página se le pedirá el diálogo modal estándar que solicita el nombre de usuario y la contraseña. Request.ServerVariables ("LOGON_USER") devolverá ese usuario.

Sin embargo, esto probablemente no funcione para usted porque está utilizando sus propios objetos de seguridad personalizados. Si puede averiguar cómo moverse por ese cuadro de inicio de sesión o pasar las credenciales de NT al sitio antes de solicitarlas, entonces estará todo listo.

+0

Correcto ... el problema es querer usar mi propio objeto principal. – mattruma

Cuestiones relacionadas