Search code examples
mysqlspring-bootaccess-tokenkeycloak

how to get Keycloak access token and store it in db for spring boot?


i want get the access token first and store the access token generated by keycloak during login... in my db. i am using spring boot .

this is the code that i tried for getting the access token ..but result is nothing.... have a better solution? ..

@RequestMapping(value = "/login", method = RequestMethod.GET)

public String getCustomers()
 {
HttpServletRequest request =((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes())
                .getRequest();
        KeycloakAuthenticationToken token = (KeycloakAuthenticationToken) request.getUserPrincipal();
        KeycloakPrincipal principal = (KeycloakPrincipal) token.getPrincipal();
        KeycloakSecurityContext session = principal.getKeycloakSecurityContext();
        AccessToken accessToken = session.getToken();
        String a = principal.getName();
        String username = accessToken.getPreferredUsername();
        String realmName = accessToken.getIssuer();
        AccessToken.Access realmAccess = accessToken.getRealmAccess();
        String s = session.getToken().toString();
        System.out.println(s);
        return realmName;
..  }

i expect to get the access token generated by keycloak and store it in db.

@KeycloakConfiguration class SecurityConfig extends
  KeycloakWebSecurityConfigurerAdapter {
 /**
     * Registers the KeycloakAuthenticationProvider with the authentication manager.
     */


  @Autowired public void configureGlobal(AuthenticationManagerBuilder auth)
  throws Exception { KeycloakAuthenticationProvider
  keycloakAuthenticationProvider=keycloakAuthenticationProvider();
  keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(new
  SimpleAuthorityMapper());
  auth.authenticationProvider(keycloakAuthenticationProvider); }

 /**
     * Defines the session authentication strategy.
     */
          @Bean

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

          @Bean public KeycloakConfigResolver keycloakConfigResolver() { return new
          KeycloakSpringBootConfigResolver(); }

          @Override protected void configure(HttpSecurity http) throws Exception {
          super.configure(http); http .authorizeRequests()
          .antMatchers("/login*").hasRole("springrole") .anyRequest().permitAll(); } }
this is my keycloak configuration..

Solution

  • U need login to keycloak, i see u just call custom "/login" and expect keycloak principal.