'keycloak Spring Security : Unable to login with Bearer token as null

I have integrated the Keylock with Spring boot using @KeycloakConfiguration in SecurityConfig Class,

@KeycloakConfiguration
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true, jsr250Enabled = true)
public class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter {


    // configureGlobal() tasks the SimpleAuthorityMapper to make sure roles are not
    // prefixed with ROLE_.
    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        KeycloakAuthenticationProvider keycloakAuthenticationProvider = keycloakAuthenticationProvider();
        keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(new SimpleAuthorityMapper());
        auth.authenticationProvider(keycloakAuthenticationProvider);
    }

    // keycloakConfigResolver defines that we want to use the Spring Boot properties
    // file support instead of the default keycloak.json.
    @Bean
    public KeycloakSpringBootConfigResolver KeycloakConfigResolver() {
        return new KeycloakSpringBootConfigResolver();
    }

    @Bean
    @Override
    protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
        return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl());
    }

    // we are permitting all here but we are gonna have method level
    // pre-authorization
    
      @Override protected void configure(HttpSecurity http) throws Exception {
      super.configure(http); http.cors().and().csrf().disable()
      .authorizeRequests().antMatchers("/admin**").hasAnyRole("admin")
      .anyRequest().permitAll();
      
      }
     
    
    // we configure to accepts CORS requests from all and any domains
        @Bean
        public WebMvcConfigurer corsConfigurer() {
            return new WebMvcConfigurer() {
                @Override
                public void addCorsMappings(CorsRegistry registry) {
                    registry.addMapping("/**").allowedOrigins("*").allowedMethods("GET", "POST", "PUT", "DELETE");
                }
            };
        }
        
    




@PostMapping("/login")
    public @ResponseBody  AuthToken login(@RequestBody LoginForm form) {
        
          Collection<SimpleGrantedAuthority> authorities =
          (Collection<SimpleGrantedAuthority>) SecurityContextHolder
          .getContext().getAuthentication().getAuthorities();       
          
          AuthToken authToken = authService.login(form);
          authToken.setAuthorities(authorities);
          return authToken;
         

    }

and I am able to log in without a Bearer token and with an empty Bearer token. enter image description here I have created a login page in angular, and from that, I am passing the bearer token is null. enter image description here

I am getting

status": 401, “error”: “Unauthorized”

and there are no security logs on eclipse.

enter image description here

Thanks and Regards



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source