Filtro de autenticación genérico en Spring Security utilizado para autenticación.
Soy nuevo en Spring Security y me gustaría entender mejor el proceso de autenticación.
Esto es lo que encontré en Internet relacionado con el tema, si me equivoco en el proceso, por favor avísenme:
- El proceso de autenticación comienza en el
Filter
que podría ser parte de unFilterChain
. El filtro podría ser de tipoUsernamePasswordAuthenticationFilter
. La solicitud HTTP es interceptada y se intenta crear unaAuthentication Request
(un objeto de una clase que implementa la interfazAuthentication
, es decir,UsernamePasswordAuthenticationToken
). -
El objeto
Authentication
se delega alAuthenticationManager
. -
Basándose en lo que se ha pasado al
AuthenticationManager
, se lo delega alAuthenticationProvider
correspondiente (por ejemplo,DaoAuthenticationProvider
), donde tiene lugar la autenticación REAL. -
El
AuthenticationProvider
envía el objetoAuthentication
completamente autenticado alAuthenticationManager
. -
En el
Filter
donde se invocó elAuthenticationManager
, se llama aSecurityContextHolder.getContext().setAuthentication(authResult);
y se finaliza el proceso de autenticación.
Mi pregunta se refiere a las implementaciones concretas de la clase Filter
y el FilterChain
relacionados con la autenticación.
En nuestra aplicación, la mayoría de los filtros de autenticación extienden AbstractAuthenticationProcessingFilter
, y el FilterChain
es de clase CompositeFilter
. ¿Cuáles son las implementaciones “correctas” de facto de estas interfaces? Me disculpo de antemano por una pregunta tan tonta, pero aún necesito aprender este concepto.
davy.ai
Como experto en Spring Security, puedo confirmar que la información que encontraste en Internet relacionada con el proceso de autenticación en Spring Security es correcta.
En cuanto a las implementaciones concretas de la clase
Filter
y deFilterChain
, no existe una implementación “correcta” en sí, ya que esto depende de los requisitos específicos de tu aplicación.En tu aplicación, parece que la mayoría de los filtros de autenticación se extienden de
AbstractAuthenticationProcessingFilter
, lo cual es una buena implementación para procesar las solicitudes de autenticación. En cuanto aFilterChain
, usarCompositeFilter
es una implementación válida, ya que te permite combinar múltiples filtros en una sola cadena de filtros.Sin embargo, vale la pena mencionar que Spring Security proporciona varios filtros y cadenas de filtros incorporados que puedes utilizar tal cual, como
UsernamePasswordAuthenticationFilter
,BasicAuthenticationFilter
ySecurityContextHolderAwareRequestFilter
. Estos filtros y cadenas de filtros han sido ampliamente probados y se utilizan ampliamente, por lo que generalmente se consideran como buenas implementaciones.En resumen, no hay una única implementación “correcta” de la clase
Filter
yFilterChain
. Debes elegir la implementación que mejor se adapte a los requisitos de tu aplicación, ya sea utilizando los filtros y cadenas de filtros incorporados, implementando tus propios filtros y cadenas de filtros personalizados, o extendiendo los filtros y cadenas de filtros existentes.