46 lines
1.7 KiB
Java
46 lines
1.7 KiB
Java
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<GrantedAuthority> mappedAuthorities = new HashSet<>();
|
|
|
|
// * * Extract your custom claim (change "roles" to your claim name)
|
|
List<String> 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()
|
|
);
|
|
}
|
|
}
|
|
|