Autenticación Integrada de Windows
Este término se utiliza para designar las conexiones autenticadas automáticamente entre Microsoft Internet Information Services (IIS), Internet Explorer y otras aplicaciones conectadas al Directorio Activo.
También se conoce como autenticación negociada http, autenticación NT, autenticación NTLM, autenticación de dominio, autenticación integrada de Windows o simplemente autenticación de Windows.
La autenticación integrada de Windows utiliza características de seguridad entre clientes y servidores. A diferencia de otros tipos de autenticación (como la Basic o la Digest), inicialmente no le pide al usuario su identificador ni su contraseña. La información actual de identidad del usuario en el ordenador cliente es suministrada al servidor a través del navegador mediante un intercambio de datos codificado.
Si este intercambio de autenticación falla por alguna razón, el navegador puede pedir al usuario su identificación y contraseña.
La autenticación integrada de Windows no es un estándar ni tampoco un protocolo de autenticación. Internamente se apoya en protocolos tales como Kerberos, NTLMSSP o SPNEGO para realizarla.
La autenticación integrada de Windows ha sido llevada también a herramientas que se ejecutan en otros sistemas operativos como UNIX, Linux o Mac OSX.
Su utilización es especialmente conveniente en intranets donde por lo general todos los clientes se encuentran en un mismo dominio.
- El cliente (navegador) realiza una petición GET al servidor.
- El servidor de aplicaciones responde con un código 401 indicando que el cliente no está autorizado a ver la página solicitada.
El servidor Web (que ejecuta el sitio Web) cree que el flujo de datos HTTP enviado por el cliente es correcto, pero el acceso al recurso URL requiere autenticación de usuario, que:
- No fue provista
- Fue provista, pero no superó las pruebas de autorización.
Esto se conoce comúnmente como "Autenticación básica de HTTP". La solicitud de autenticación real esperada del cliente se define en el protocolo HTTP como el campo de cabecera WWW-Authenticate.
Generalmente, este mensaje de error significa que usted tiene primero que iniciar sesión (ingresar un usuario y contraseña válidos) en algún lugar. Si los acaba de ingresar e inmediatamente ve un error 401, esto quiere decir que el usuario, la contraseña o ambos son inválidos por alguna razón (ingresados incorrectamente, usuario suspendido, etc.)
3. El navegador responde entonces con un mensaje tipo 1 codificado en base 64 indicando el nombre de la máquina (nombre de host) y el dominio donde se está ejecutando.
- El servidor de aplicaciones responde nuevamente con un error 401 de autorización, pero añadiendo además un mensaje tipo 2 codificado en base 64 denominado desafío NTLM (NTLM Challenge).
- Finalmente el servidor, tras decodificar y validar las respuestas del cliente, responde con un código http 200.
Componente
|
Descripción
|
Primary Domain Controller (PDC)
|
Controlador principal de dominio (PDC) donde se registran y autentican todos los usuarios que inician sesión en los ordenadores de la red local (intranet)
|
Ordenadores de la red local
|
Puestos de trabajo de escritorio o portátiles conectados al controlador principal de dominio. Los usuarios abren sesión en estos puestos autenticándose contra el dominio de Directorio Activo. Estos ordenadores ejecutan un sistema operativo de Microsoft (Windows XP/ Windows Vista/Windows 7)
|
Servidores UNIX
|
Servidores de aplicación que ejecutan aplicaciones JSP (aplicaciones Web dinámicas). Estos servidores de aplicación se ejecutan sobre algún sabor de UNIX (Solaris, FreeBSD, Suse, RedHat o AIX)
|
- /**
- *
- */
- package com.windowsuser;
- import javax.servlet.http.*;
- /**
- * @author Jose Manuel Ayala Wilson
- * @version 0.1
- * @since 26/09/2012
- */
- public class WindowsUser {
- private String windowsDomain = "";
- private String windowsUser = "";
- private String windowsHost = "";
- public WindowsUser(HttpServletResponse response,HttpServletRequest request)
- {
- String auth = request.getHeader("Authorization");
- try
- {
- if (auth == null) {
- response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
- response.setHeader("WWW-Authenticate", "NTLM");
- response.flushBuffer();
- return;
- }
- if (auth.startsWith("NTLM ")) {
- byte[] msg = new sun.misc.BASE64Decoder().decodeBuffer(auth.substring(5));
- int off = 0, length, offset; char a = 0; char b = 32;
- String s;
- switch(msg[8])
- {
- case 1: // Client to Server GET .. Authorization:NTLM <base64-encoded type-1 msg>
- off = 18;
- byte z = 0;
- byte[] msg1 = {(byte)'N', (byte)'T', (byte)'L', (byte)'M', (byte)'S', (byte)'S', (byte)'P', z,
- (byte)2, z, z, z, z, z, z, z,
- (byte)40, z, z, z, (byte)1, (byte)130, z, z, z,
- (byte)2, (byte)2, (byte)2, z, z, z, z,
- z, z, z, z, z, z, z, z};
- response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
- String s1 = new sun.misc.BASE64Encoder().encodeBuffer(msg1);
- response.setHeader("WWW-Authenticate", "NTLM " + s1.trim());
- response.flushBuffer();
- return;
- case 3: // Client to Server GET .. Authorization:NTLM <base64-encoded type-3 msg>
- off = 30;
- length = msg[off+17]*256 + msg[off+16];
- offset = msg[off+19]*256 + msg[off+18];
- s = new String(msg, offset, length);
- windowsHost = s.trim().replace(a,b).replaceAll(" ","");
- length = msg[off+1]*256 + msg[off];
- offset = msg[off+3]*256 + msg[off+2];
- s = new String(msg, offset, length);
- windowsDomain = s.trim().replace(a,b).replaceAll(" ","");
- length = msg[off+9]*256 + msg[off+8];
- offset = msg[off+11]*256 + msg[off+10];
- s = new String(msg, offset, length);
- windowsUser = s.trim().replace(a,b).replaceAll(" ","");
- break;
- default: // Server to Server GET .. WWW-Authenticate:NTLM <base64-encoded type-2 msg>
- return;
- }
- }
- }
- catch(Exception ex)
- {
- System.out.println(ex.getMessage());
- }
- }
- public String getWindowsDomain() {
- return windowsDomain;
- }
- public String getWindowsUser() {
- return windowsUser;
- }
- public String getWindowsHost() {
- return windowsHost;
- }
- }
- <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
- <%@ page import="com.windowsuser.WindowsUser" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>Windows User</title>
- </head>
- <%
- try
- {
- // Obtenemos el usuario / dominio y nombre del host remoto
- WindowsUser wu = new WindowsUser(response,request);
- // Mostramos el usuario de dominio en la pagina
- out.println("DOMINIO = " + wu.getWindowsDomain() +
- ",USER = " + wu.getWindowsUser() +
- ",WINDOWS HOST = " + wu.getWindowsHost());
- }
- catch(Exception e)
- {
- String msg = e.getMessage();
- if (msg != null){
- System.out.println(msg);
- }
- }
- %>
- <body>
- </body>
- </html>
El código de este proyecto se puede descarga desde Google Code aquí.
Pruebas de escenario realizadas
- Estaciones de trabajo Windows XP Professional
- Navegadores Internet Explorer 8.0 / Google Chrome 10.0
- IBM WebSphere Application Server 7.0 sobre IBM AIX 6.1 / JDK 1.6.0.0
- IBM WebSphere Community Edition 2.1.1.4 sobre Ubuntu Linux 10.10 Maverick Meerkat / JDK 1.6.20
- Active Directory. Wikipedia. http://es.wikipedia.org/wiki/Active_Directory
- NTLM. Wikipedia. http://en.wikipedia.org/wiki/NTLM
- Integrated Windows Authentication. Wikipedia. http://en.wikipedia.org/wiki/Integrated_Windows_Authentication
- NTLM Authentication Scheme for http. Ronald Tschalä.http://www.innovation.ch/personal/ronald/ntlm.html
- Single Sign On. http://es.wikipedia.org/wiki/Single_Sign-On
2 comentarios:
Hola, estoy creando algo similar, pero tengo muchas dudas espero y puedas apoyarme.
saludos.
Si no manejo LAN, pero accedo a mi Router y a un DVR por Red , puiedo desactivar esta autenticación de windows en las Opciones de Internet? o es mejor dejarlo activado para que los protocolos y/o servicios que se comparten los dispositivos móbiles y demás que se conectan a través de mi tourter, y que "acostumbren" usar esta autenticación, no presenten problemas.? De antemano muchas gracias por ampliar mis conocimientos.
Datos Técnicos:
Board Intel DG31PR (DDR2)
Core 2 Duo E7300
4 GB RAM (3 Usables por el OS a 32Bits)
Win7 Ultimate x 86
NAvegador Principal: Cent Browser (basado en Chrome), Firefox, I.E 8 (para cuando IE Tab no funciona)
Y otros Navegadores portavles : Chromium, Opera, Avant, etc...
Router: QPCOM QP-wr154N Configurado en Mofo Gateway.
Publicar un comentario