package com.hithomelabs.cftunnels.Config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.oauth2.client.oidc.userinfo.OidcUserRequest; import org.springframework.security.oauth2.client.oidc.userinfo.OidcUserService; import org.springframework.security.oauth2.core.oidc.user.DefaultOidcUser; import org.springframework.security.oauth2.core.oidc.user.OidcUser; import java.util.HashSet; import java.util.List; import java.util.Set; @Configuration public class CustomOidcUserConfiguration extends OidcUserService { @Autowired AuthoritiesToGroupMapping authoritiesToGroupMapping; @Override public OidcUser loadUser(OidcUserRequest userRequest) { // * * Delegate to the default implementation for loading user and claims OidcUser oidcUser = super.loadUser(userRequest); // * * Copy existing authorities (e.g. scopes → authorities) Set mappedAuthorities = new HashSet<>(); // * * Extract your custom claim (change "roles" to your claim name) List groups = oidcUser.getClaimAsStringList("groups"); if (groups != null) { groups.forEach(group -> mappedAuthorities.addAll(authoritiesToGroupMapping.getAuthorityForGroup().get(group)) ); } // * * Return a new DefaultOidcUser with merged authorities return new DefaultOidcUser( mappedAuthorities, oidcUser.getIdToken(), oidcUser.getUserInfo() ); } }