Saltar al contenido

Autenticación basada en token de seguridad de Spring

Agradeceríamos tu ayuda para difundir nuestras reseñas en referencia a las ciencias de la computación.

Solución:

Así es como pude implementar la autenticación basada en token y la autenticación básica

SpringSecurityConfig.java

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter


    @Override
    public void configure(final AuthenticationManagerBuilder auth) throws Exception
    
        auth.userDetailsService(this.participantService).passwordEncoder(this.passwordEncoder());
    

    @Override
    protected void configure(final HttpSecurity http) throws Exception
    

        //Implementing Token based authentication in this filter
        final TokenAuthenticationFilter tokenFilter = new TokenAuthenticationFilter();
        http.addFilterBefore(tokenFilter, BasicAuthenticationFilter.class);

        //Creating token when basic authentication is successful and the same token can be used to authenticate for further requests
        final CustomBasicAuthenticationFilter customBasicAuthFilter = new CustomBasicAuthenticationFilter(this.authenticationManager() );
        http.addFilter(customBasicAuthFilter);

    

TokenAuthenticationFilter.java

    public class TokenAuthenticationFilter extends GenericFilterBean
    


        @Override
        public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain)
                throws IOException, ServletException
        
            final HttpServletRequest httpRequest = (HttpServletRequest)request;

             //extract token from header
            final String accessToken = httpRequest.getHeader("header-name");
            if (null != accessToken) 
           //get and check whether token is valid ( from DB or file wherever you are storing the token)

          //Populate SecurityContextHolder by fetching relevant information using token
               final User user = new User(
                            "username",
                            "password",
                            true,
                            true,
                            true,
                            true,
                            authorities);
                    final UsernamePasswordAuthenticationToken authentication =
                            new UsernamePasswordAuthenticationToken(user, null, user.getAuthorities());
                    SecurityContextHolder.getContext().setAuthentication(authentication);

            

            chain.doFilter(request, response);
        

      

CustomBasicAuthenticationFilter.java

@Component
public class CustomBasicAuthenticationFilter extends BasicAuthenticationFilter 


    @Autowired
    public CustomBasicAuthenticationFilter(final AuthenticationManager authenticationManager) 
        super(authenticationManager);
    

    @Override
    protected void onSuccessfulAuthentication(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response, final Authentication authResult) 
        //Generate Token
        //Save the token for the logged in user
        //send token in the response
        response.setHeader("header-name" , "token");


    


Como nuestro CustomBasicAuthenticationFilter se configuró y agregó como un filtro a la seguridad de Spring,

Siempre que la autenticación básica sea exitosa, la solicitud se redirigirá a onSuccessfulAuthentication donde configuramos el token y lo enviamos en la respuesta con algún encabezado “nombre de encabezado”.

Si se envía “nombre de encabezado” para una solicitud adicional, la solicitud pasará primero por TokenAuthenticationFilter antes de intentar la autenticación básica.

Puede intentar configurar su personalizado AuthenticationToken token en su filtro de autenticación, por ejemplo:

public class AuthenticationFilter extends GenericFilterBean 
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException 
        final String authTokenHeader = ((HttpServletRequest)request).getHeader(Constants.AUTH_HEADER_NAME);

        if (authTokenHeader != null) 
            SecurityContextHolder.getContext().setAuthentication(createAuthenticationToken(authTokenHeader));
        

        chain.doFilter( request, response );
    

Si te ha sido de utilidad nuestro artículo, sería de mucha ayuda si lo compartes con otros desarrolladores y nos ayudes a dar difusión a este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *