Pregunta

Aquí está el escenario. Estoy en código que se ejecuta en un servidor web en un dominio AD. Algún cliente me ha conectado. ¿Cómo obtengo el nombre de usuario de ese cliente, sin que el cliente complete un formulario en su navegador? Debe usar tecnologías Java en el lado del servidor web.

editar:

Terminé usando el filtro de negociación de seguridad de primavera como se describe en el siguiente enlace. Hay un tutorial disponible. Usando request.getPrincipal (). getName () desde dentro de un servlet da el nombre de usuario.

http://waffle.codeplex.com/

¿Fue útil?

Solución

Necesitas configurar el Spring Security Kerberos Extension - Esta es la única forma de estar fuera de la caja de hacer lo que está describiendo en Spring Security 3. Esto admite la negociación de SPNEGO, pero requiere cierta configuración en el servidor (y el conocimiento de cómo funcionan Spnego y Kerberos).

No hay mucha documentación, pero las aplicaciones de muestra de Mike que envía con 1.0m2 son excelentes, y cubren la mayoría de los escenarios comunes, incluida la autenticación automatizada de SPNEGO.

La clave para SPNEGO es configurar una personalización AuthenticationEntryPoint - Tendrá que hacer esto con un frijol de primavera personalizado de la siguiente manera:

<bean id="kerbEntryPoint" class="org.springframework.security.extensions.kerberos.web.SpnegoEntryPoint" />

<bean id="kerbAuthenticationProcessingFilter" class="org.springframework.security.extensions.kerberos.web.SpnegoAuthenticationProcessingFilter">
    <property name="authenticationManager" ref="authenticationManager" />
</bean>

... Hay más frijoles que se requerirán además de estos (nuevamente, consulte las muestras con la extensión de Kerberos). Publicar de regreso Si se lleva más lejos con Spring Security o si desea detalles exactos (ya que hay una serie de frijoles / bits de configuración involucrados, algún conocimiento de su configuración sería útil, como si está utilizando el <http> estilo de espacio de nombres o no).

Aparte de esta opción, tendría que configurar un tipo similar de Auth Spnego (como usar Waffle, como sugiere) - Otras preguntas Cubra esto bastante bien.

Finalmente, posiblemente podría frente a Tomcat con otro servidor web que admite SPNEGO o NTLM mejor, como Microsoft IIS o Apache Web Server con mod_spnego.

¡Ojalá una de estas ideas funcione para usted!

Otros consejos

¿Qué navegador están usando sus usuarios? Si es decir; Existe una solución simple:

<html>
<script type="text/javascript">
var WinNetwork = new  ActiveXObject("WScript.Network");
alert(WinNetwork.UserName);
</script>
</html>

La última forma para que Windows lo haga es Spnego. Para que funcione completamente, necesita que su servidor tenga una cuenta en AD y se comunique con Kerberos. Entonces la seguridad de primavera, me dijeron, apoya esto.

Ahora, no siempre necesita autorizar a los usuarios. A veces (por ejemplo, por razones de estadísticas) es suficiente para obtener la ID de anuncio del usuario. Cuando estaba jugando con SPNEGO, los datos binarios que se pasaron del navegador incluían la ID de usuario en texto claro. Se puede extraer de allí, pero no se puede confiar, por supuesto.

NTLM está desactualizado, se considera menos seguro y se implementa en gran medida de los entornos.

Si está utilizando TomCat, use GOFRE.

Apuesto a que puede poner el servidor web Apache frente a Tomcat para que Apache pueda autenticarse usando Ntlm o Kerberos. Luego puede usar las reglas de reescritura para enviar solicitudes a Tomcat con el nombre de usuario en la llanura. Esta es solo una idea, no he implementado esto yo mismo. Sin embargo, estamos utilizando la autenticación Apache Kerberos en nuestra intranet. Mi sugerencia no es usar NTLM, es anticuado y escamosa.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top