2008-08-22 18 views
6

Estoy tratando de implementar la autenticación NTLM en uno de nuestros sitios internos y todo está funcionando. La única pieza del rompecabezas que no tengo es cómo tomar la información de NTLM y autenticarme con Active Directory.Cómo uso la autenticación NTLM con Active Directory

Hay un good description of NTLM y el encryption used for the passwords, que utilicé para implementar esto, pero no estoy seguro de cómo verificar si la contraseña del usuario es válida.

Estoy usando ColdFusion pero una solución a este problema puede ser en cualquier idioma (Java, Python, PHP, etc.).

Editar:

estoy usando ColdFusion en RedHat Enterprise Linux. Desafortunadamente no podemos usar IIS para administrar esto y en su lugar tenemos que escribir o usar una herramienta de terceros para esto.


actualización-Tengo este trabajo y aquí es lo que hice

Fui con el JCIFS library from samba.org.

Tenga en cuenta que el método siguiente sólo funcionará con NTLMv1 y NO funciona con NTLMv2. Si no puede utilizar NTLMv1 puede intentar Jespa, que es compatible con NTLMv2 pero no es de código abierto, o puede utilizar Kerberos/SPNEGO.

Aquí está mi web.xml:

<web-app> 
    <display-name>Ntlm</display-name> 

    <filter> 
     <filter-name>NtlmHttpFilter</filter-name> 
     <filter-class>jcifs.http.NtlmHttpFilter</filter-class> 

     <init-param> 
      <param-name>jcifs.http.domainController</param-name> 
      <param-value>dc01.corp.example.com</param-value> 
     </init-param> 
     <init-param> 
      <param-name>jcifs.smb.client.domain</param-name> 
      <param-value>CORP.EXAMPLE.COM</param-value> 
     </init-param> 
    </filter> 

    <filter-mapping> 
     <filter-name>NtlmHttpFilter</filter-name> 
     <url-pattern>/admin/*</url-pattern> 
    </filter-mapping> 
</web-app> 

Ahora todos los URLs que coincidan /admin/* requerirá autenticación NTLM.

Respuesta

0

Hm, no estoy seguro de lo que está tratando de lograr.

Normalmente, la implementación de NTLM en un sitio interno es tan simple como desmarcar "Habilitar acceso anónimo" en "Autenticación y control de acceso" en la pestaña "Seguridad de directorio" de las propiedades del sitio web en IIS. Si eso se borra, los usuarios de su aplicación web verán un diálogo emergente NTLM.

No es necesario que escriba ningún código que interactúe con Active Directory. IIS se encarga de la autenticación por usted.

¿Puede ser más específico sobre lo que está tratando de hacer?

1

Según tengo entendido.
NTLM es uno de los métodos de autenticación integrados de IIS. Si el Host está registrado en el dominio de dicho directorio activo, debe ser automático. Una cosa a tener en cuenta es que el nombre de usuario debe estar en uno de dos formatos.

Si usted está tratando de ir en contra de un directorio activo diferente que usted debe utilizar la autenticación de un estilo de formas y algo de código LDAP.

Si usted está tratando de hacer lo Intranet Sin Cero Entrar con la autenticación de IIS integrado

  • el dominio necesita ser catalogado como un sitio de confianza en el navegador IEX
  • o utilizar una dirección URL de la utiliza el NetBIOS nombre en lugar del nombre DNS.
  • para que funcione en Firefox leer here
2

La fuente ModNTLM para Apache puede proporcionarle los punteros correctos.

Si es posible, debería considerar usar Kerberos en su lugar. Le permite autenticar Apache contra AD, y es un espacio de proyecto más activo que NTLM.

18

Lo que realmente está preguntando es: ¿Hay alguna manera de validar los tokens "WWW-Authenticate: NTLM" enviados por IE y otros clientes HTTP al hacer Single Sign-On (SSO). SSO es cuando el usuario ingresa su contraseña una "sola" vez cuando lo hacen Ctrl-Alt-Del y la estación de trabajo lo recuerda y lo usa según sea necesario para acceder transparentemente a otros recursos sin solicitar al usuario una contraseña nuevamente.

Tenga en cuenta que Kerberos, como NTLM, también se puede usar para implementar la autenticación SSO. Cuando se le presente un encabezado "WWW-Authenticate: Negotiate", IE y otros navegadores enviarán tokens Kerberos y/o NTLM envueltos en SPNEGO. Más sobre esto más adelante, pero primero responderé la pregunta como se me pidió.

La única forma de validar una "respuesta" de contraseña NTLMSSP (como las codificadas en "WWW-Authenticate: NTLM" encabezados enviados por IE y otros navegadores) es con una llamada DCERPC NetrLogonSamLogon (Ex) con el servicio NETLOGON de un controlador de dominio de Active Directory que es una autoridad para, o tiene una "confianza" con una autoridad para la cuenta de destino. Además, para asegurar adecuadamente la comunicación NETLOGON, se debe utilizar el cifrado de Secure Channel a partir de Windows Server 2008.

No hace falta decir que hay muy pocos paquetes que implementen las llamadas de servicio NETLOGON necesarias. Los únicos que yo sepa son:

  1. de Windows (por supuesto)

  2. Samba - Samba es un conjunto de programas de software para UNIX que implementa una serie de protocolos de Windows incluyendo el servicio NETLOGON necesaria llamadas. De hecho, Samba 3 tiene un daemon especial para este llamado "winbind" que otros programas como PAM y módulos de Apache pueden (y hacen) interactuar. En un sistema Red Hat, puede hacer un yum install samba-winbind y yum install mod_auth_ntlm_winbind. Pero esa es la parte fácil: configurar estas cosas es otra historia.

  3. Jespa - Jespa (http://www.ioplex.com/jespa.html) es una biblioteca 100% Java que implementa todas las llamadas al servicio NETLOGON necesarias.También proporciona implementaciones de interfaces Java estándar para la autenticación de clientes de diversas maneras, como con un filtro de servlet HTTP, servidor de SASL, JAAS LoginModule, etc.

Tenga en cuenta que hay un número de aceptantes de autenticación NTLM que no lo hacen implementar las llamadas al servicio NETLOGON necesarias, pero en su lugar, hacer algo más que finalmente conduzca a la falla en un escenario u otro. Por ejemplo, durante años, la forma de hacer esto en Java fue con el filtro de servlet de autenticación HTTP NTLM de un proyecto llamado JCIFS. Pero ese filtro utiliza una técnica de hombre en el medio que ha sido responsable de un "error de hipo" de larga data y, más importante aún, no es compatible con NTLMv2. Por estos y otros motivos, está programado para ser eliminado de JCIFS. Hay varios proyectos que han sido involuntariamente inspirados por ese paquete que ahora también están igualmente condenados. También hay una gran cantidad de fragmentos de código publicados en los foros de Java que decodifican el token de encabezado y arrancan el dominio y el nombre de usuario, pero no hacen absolutamente nada para validar realmente las respuestas de contraseña. Baste decir que si usa uno de esos fragmentos de código, puede caminar con los pantalones bajados.

Como he eludido anteriormente, NTLM es solo uno de los varios proveedores de soporte de seguridad de Windows (SSP). También hay un Digest SSP, Kerberos SSP, etc. Pero el Negociado SSP, que también se conoce como SPNEGO, suele ser el proveedor que MS usa en sus propios clientes de protocolo. El SSP Negociar en realidad solo negocia el NTP de NTLM o el SSP de Kerberos. Tenga en cuenta que Kerberos solo se puede usar si tanto el servidor como el cliente tienen cuentas en el dominio de destino y el cliente puede comunicarse con el controlador de dominio lo suficiente para adquirir un vale de Kerberos. Si no se cumplen estas condiciones, el NTP de NTLM se usa directamente. Entonces NTLM no está de ninguna manera obsoleto.

Finalmente, algunas personas han mencionado el uso de un "enlace simple" LDAP como un servicio de validación make-shift password. LDAP no está realmente diseñado como un servicio de autenticación y por esta razón no es eficiente. Tampoco es posible implementar SSO usando LDAP. SSO requiere NTLM o SPNEGO. Si puede encontrar un aceptador NETLOGON o SPNEGO, debe usarlo en su lugar.

Mike

1

Salida Waffle. Implementa SSO para servidores Java que usan Win32 API. Hay servlet, válvula tomcat, seguridad de primavera y otros filtros.

1

puede resolver el emergente de autenticación de Firefox mediante la realización de los siguientes pasos en Firefox:

  1. abierto Mozilla Firefox
  2. Tipo about: config en la barra de direcciones
  3. Introduzca network.automatic-ntlm-auth. -URI de confianza en la búsqueda texfield
  4. doble clic en el nombre y la clave de preferencia en el nombre del servidor como valor de cadena
  5. cerrar la pestaña
  6. Reinicia Firefox.
Cuestiones relacionadas