2011-12-06 22 views
8

Lo que estoy tratando de hacer:Desactivar Avisos Iniciar sesión en mod_auth_sspi_1.0.4-2.2.2

  • Crear una página de inicio en la intranet de la empresa que se obtiene automáticamente el que ha iniciado sesión en Windows nombre de usuario de la persona de visión la página sin la persona que solicita ingresar estas credenciales cuando se carga la página.

  • Actualmente, solo quiero que tome el nombre de usuario local, ya que pasará un tiempo antes de que nuestros chicos de TI obtengan una configuración de dominio. Por ejemplo, en este momento me gustaría que capture el "(PC-Name) \ windows.user.name" sin ninguna indicación.

Medio Ambiente:

  • Apache 2.2.21 en Windows 7 x64 (habrá en CentOS una vez que está en producción).

  • PHP 5.3.8 (VC9-ZTS).

  • Internet Explorer 9.0.8xy Firefox 6.0.2 (se preocuparán por Chrome más adelante).

  • La página de prueba actual es solo una secuencia de comandos PHP que llama a print_r ($ _SERVER).

  • Para simplificar, el directorio en el que estoy probando esto no es VirtualHost.

pasos que he tomado hasta ahora:

  • mod_sspi_1.0.4-2.2.2 descargado desde SourceForge y extrajeron mod_auth_sspi.so de módulos de Apache directorio.

  • añadido la declaración módulo:

    LoadModule sspi_auth_module/mod_auth_sspi.so

  • añadido la definición directorio:

    AllowOverride None Opciones Ninguno Orden allow, deny Dejar de todas las

    AuthName "My Intranet" 
    AuthType SSPI 
    SSPIAuth On 
    SSPIAuthoritative Off 
    
    require valid-user 
    

  • habilitada la autenticación integrada en Firefox por ir a about: config y establecer auth.trusted-network.automatic-ntlm-URI de la ruta URL absoluta del script PHP luego se reinicia Firefox.

  • Todavía no he completado el paso equivalente en IE, pero lo haré una vez que Firefox funcione, ya que es nuestro navegador compatible principal internamente.

  • Se reinició Apache e intenté cargar el script PHP de prueba.

El resultado:

  • En tanto en IE y Firefox, consigo incitado por un nombre de usuario y contraseña antes de cargar la página. No quiero ese aviso. Quiero que el nombre de usuario sea detectado automáticamente sin un aviso.

Solución de problemas hasta el momento:

  • He intentado ciclismo a través de las distintas opciones, tales como SSPI authritative de encendido/apagado y otras cosas. Sin efecto.

  • La solicitud ya no aparece si elimino "require valid-user", pero tampoco se pasa el nombre de usuario (no es NULL, simplemente no se establece en el período de la matriz).

  • Si presiono "Cancelar" en el mensaje, obtengo la página "Autenticación requerida".

  • Si ingreso un nombre de usuario no válido o el nombre de usuario correcto pero con una contraseña incorrecta, la página se cargará pero el nombre de usuario será "(PC-Name) \ Guest".

  • Si ingreso el nombre de usuario/contraseña correctos, se muestra el nombre de usuario en lugar de Invitado.

  • Una vez que ingreso un nombre de usuario/contraseña en IE o Firefox, el navegador recuerda ese nombre de usuario en las siguientes páginas hasta que borre el caché de contraseñas almacenadas o reinicie el navegador.

  • He pasado las últimas 3 o más horas buscando en Google y adivinando al azar. Cero éxito. He encontrado algunas publicaciones aisladas en el foro de personas que hacen esta pregunta, pero o bien no obtuvieron respuesta o bien me ofrecieron soluciones que ya probé sin éxito.

Una vez más, lo que quiero es que la página se carga, sin ninguna petición, y mostrar el nombre de usuario que ha iniciado sesión actualmente de Windows en la salida de la matriz $ _SERVER.

Por lo que puedo entender, esto es: un problema de configuración de Windows, un problema de configuración de Apache o un problema de configuración del navegador. Aparte de eso, estoy recién de ideas.

Estaría muy agradecido por cualquier ayuda que pueda ofrecer. ¡Gracias!

- Kris

+0

Lo sentimos, pero no leyó completamente lo anterior, está trabajando en una estación de Windows. – ehime

Respuesta

7

Tomó un par de días, pero finalmente lo descubrí por mi cuenta. Aparentemente, los diversos documentos y tutoriales que describen la configuración de Firefox about: config son incorrectos. Reclaman que debe incluirse el URI completo, incluido el prefijo de protocolo. Como resultado, todo lo contrario es verdad.

Como un tiro al azar en la oscuridad, intenté configurarlo solo como "localhost" (el dominio en el que se ejecuta el servidor de prueba). ¡Y voilá! ¡Eso lo solucionó! "http: // localhost", por otro lado, hizo que se rompiera.

Una vez que lo conseguí trabajando en Firefox, habiendo verificado que la configuración del lado del servidor era correcta, aplicarla a IE y Chrome fue muy fácil. Para IE, acabo de agregar "http: // localhost" (en este caso, desea el prefijo del protocolo) a la zona "Intranet". Y dado que Chrome utiliza la misma configuración de red que IE usa, ese paso lo hizo funcionar para ambos navegadores.

En cuanto a la configuración del lado del servidor, parece que tuve ese derecho desde el principio. Yo era capaz de simplificar un poco, sin embargo, lo que en realidad todo lo que necesita en el bloque de directorio es la siguiente:

AuthName "Whatever you want to call your intranet" 
AuthType SSPI 
SSPIAuth On 

require valid-user 

Con esta configuración, si apunta a un script PHP haciendo un print_r ($ _SERVER), la salida contendrá algo como esto:

[REMOTE_USER] => dev-kdc-pc01\kris.craig 
[AUTH_TYPE] => NTLM 
[PHP_AUTH_USER] => dev-kdc-pc01\kris.craig 

Si desea deshacerse de la parte del dominio (es decir, el "dev-KDC-PC01 \"), puede analizarlo en PHP o añadir esta línea a su material de SSPI en el bloque de directorio en httpd.conf mencionado anteriormente:

SSPIOmitDomain On 

Tenga en cuenta que solo he probado esto en un sistema Windows donde el servidor web Apache se estaba ejecutando en localhost. Todavía no lo he probado en una situación en la que el servidor Apache se ejecuta en Linux, aunque eso no debería tener ningún impacto en los resultados, ya que el servidor solo acepta lo que el navegador le envíe. Esto también requiere que el cliente ejecute Windows o algún otro entorno compatible con SSPI. Todavía no he determinado cómo hacer que esto funcione para nuestros empleados que usan Mac.

También tenga en cuenta que he probado esto con éxito en una red que hace no actualmente tienen un dominio configurado. Según los artículos publicados en otra parte, el comportamiento debe ser idéntico en una estación de trabajo que es miembro de un dominio.

Espero que esto ayude! ¡Gracias!

+0

Probé todo, su solución tampoco me ayuda ... – Somnium

0

Esto podría ser una respuesta parcial.

BOOL WINAPI GetUserName(
    __out LPTSTR lpBuffer, 
    __inout LPDWORD lpnSize 
); 

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724432%28v=vs.85%29.aspx

Parece que se puede recuperar la información del sistema usando esto, la otra mitad podría ser automatizar usando Perl o Python para raspar la información, a continuación, que lo ponga a PHP.

Aquí está el esquema para buscar SysInfo en Windows.

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724426%28v=vs.85%29.aspx

Sinceramente esto es una cosa muy fácil de hacer con PECL/PAM si está utilizando Linux.

+0

¿No tendría que estar ejecutándose este lado del cliente? El servidor finalmente ejecutará CentOS y, básicamente, solo aceptará lo que el navegador indique que son las credenciales. –

Cuestiones relacionadas