único tutorial sso sesión respuesta intentar inicio error basado autenticar php active-directory apache2 nginx single-sign-on

tutorial - ¿Cómo puedo implementar el inicio de sesión único(SSO) usando Microsoft AD para una aplicación PHP interna?



saml (5)

Estoy vagamente consciente de que en una computadora unida a un dominio se le puede pedir a IE que envíe algunos encabezados adicionales que podría usar para iniciar sesión automáticamente en una aplicación. Tengo Apache ejecutándose en un servidor de Windows con mod_php. Me gustaría poder evitar que el usuario tenga que iniciar sesión si es necesario. He encontrado algunos enlaces que hablan de los módulos de Kerberos y Apache.

http://www.onlamp.com/pub/a/onlamp/2003/09/11/kerberos.html?page=last https://metacpan.org/pod/Apache2::AuthenNTLM

Como estoy ejecutando en Windows, se ha comprobado que no es trivial instalar módulos Perl o Apache. ¿Pero PHP no tiene acceso a los encabezados HTTP?

Encontré esto pero no hace ninguna autenticación, solo muestra que PHP puede leer los encabezados NTLM. http://siphon9.net/loune/2007/10/simple-lightweight-ntlm-in-php/

Me gustaría que mis usuarios solo señalen a la aplicación y los autentiquen automáticamente. ¿Alguien ha tenido alguna experiencia con esto o ha conseguido que funcione?

ACTUALIZACIÓN Desde que originalmente publicamos esta pregunta, hemos cambiado las configuraciones a nginx y php-fcgi que todavía se ejecutan en Windows. Apache2 y php-cgi en Windows es probablemente una de las configuraciones más lentas que puede configurar en Windows. Parece que todavía podría necesitarse Apache (funciona con php-fcgi) pero preferiría una solución nginx.

También todavía no entiendo (y me encantaría que me educaran) por qué los complementos de servidor HTTP son necesarios y no podemos tener una solución independiente de PHP, servidor web.


Me gustaría tener curiosidad acerca de una solución que utiliza OpenID como back-end (de algún tipo) para esto ... No estaba viendo nada que se enganchara directamente en ActiveDirectory cuando busqué en Google (rápidamente). Sin embargo, podría ser bastante sencillo implementarlo a través de HTTP (S) (sería un proveedor de OpenID que verificara las credenciales contra su AD local). En el mejor de los casos, es posible que solo pueda agregar un par de clases a su aplicación y estar apagado y funcionando; no se requieren módulos de servidor web. Hay una gran cantidad de código fuente abierto para ambos lados de esto, así que si nada más, vale la pena echarle un vistazo. Si expusiera el backend a los usuarios (es decir, les diera URLs OpenID), tendría el beneficio adicional de poder iniciar sesión en más que solo sus sitios internos usando estas credenciales. (Ejemplo: desbordamiento de pila).

Por otro lado, me opongo a que sea necesario para que se requiera Internet Explorer. No estoy seguro de si ese es el objetivo por la forma en que escribió la pregunta, pero dependiendo de su entorno de TI, esperaría que las personas que usan Firefox o Safari (o Opera o ...) no sean tan entusiastas. (No estás desarrollando contra IE primero, ¿verdad? Eso ha sido doloroso cada vez que lo he hecho). Esto no quiere decir que no puedas usar esta característica de IE, solo que no debería ser la única opción . El enlace que publicó indicó que NTLM funcionaba con más de IE, pero como no tengo ninguna experiencia con él, es difícil juzgar qué tan bien funcionaría.


Para IIS / PHP FCGI, debe enviar un encabezado no autorizado:

function EnableAuthentication() { $realm = "yoursite"; header(''WWW-Authenticate: Digest realm="''.$realm.''",qop="auth",nonce="''.uniqid().''",opaque="''.md5($realm).''"''); header("HTTP/1.1 401 Unauthorized"); exit; }

A continuación, puede obtener el nombre de usuario con:

$winuser = $_SERVER["REMOTE_USER"];

Luego me aseguro de que $ winuser esté en mi base de datos de usuarios permitidos.

Esté SEGURO y pruébelo bajo una cuenta no privilegiada. La primera vez que instalé esto, lo probé y funcionó bien, pero más tarde, cuando un usuario estándar no administrador de servidores lo intentó, falló. Resulta que algunos de los directorios temporales deben tener permisos modificados para usuarios invitados. No puedo recordar la configuración exacta.


Tenía un problema similar que necesitaba resolver para mi organización.

Estaba buscando usar adLDAP .

Existe cierta documentación en el sitio para lograr una autenticación perfecta con Active Directory también.



Todo lo que necesitas es el mod_auth_sspi Apache mod_auth_sspi .

Configuración de muestra:

AuthType SSPI SSPIAuth On SSPIAuthoritative On SSPIDomain mydomain # Set this if you want to allow access with clients that do not support NTLM, or via proxy from outside. Don''t forget to require SSL in this case! SSPIOfferBasic On # Set this if you have only one domain and don''t want the MYDOMAIN/ prefix on each user name SSPIOmitDomain On # AD user names are case-insensitive, so use this for normalization if your application''s user names are case-sensitive SSPIUsernameCase Lower AuthName "Some text to prompt for domain credentials" Require valid-user

Y no olvide que también puede usar Firefox para SSO transparente en un dominio de Windows : simplemente vaya a about:config , busque network.automatic-ntlm-auth.trusted-uris e ingrese el nombre de host o FQDN de su interno aplicación (como myserver o myserver.corp.domain.com). Puede tener más de una entrada, es una lista separada por comas.