diff --git a/src/main/java/eu/dnetlib/loginservice/security/initiliazers/Configurations.java b/src/main/java/eu/dnetlib/loginservice/security/initiliazers/Configurations.java index f83076a..47c1382 100644 --- a/src/main/java/eu/dnetlib/loginservice/security/initiliazers/Configurations.java +++ b/src/main/java/eu/dnetlib/loginservice/security/initiliazers/Configurations.java @@ -2,6 +2,7 @@ package eu.dnetlib.loginservice.security.initiliazers; import eu.dnetlib.loginservice.properties.Properties; import eu.dnetlib.loginservice.security.oidc.OpenAIREAuthoritiesMapper; +import eu.dnetlib.loginservice.security.oidc.OpenAIREUserInfoFetcher; import eu.dnetlib.loginservice.utils.PropertyReader; import org.mitre.oauth2.model.ClientDetailsEntity; import org.mitre.oauth2.model.RegisteredClient; @@ -20,17 +21,22 @@ public class Configurations { private final Properties properties; private final PropertyReader scopeReader; private final OpenAIREAuthoritiesMapper authoritiesMapper; + private final OpenAIREUserInfoFetcher userInfoFetcher; @Autowired - public Configurations(Properties properties, OpenAIREAuthoritiesMapper authoritiesMapper, PropertyReader scopeReader) { + public Configurations(Properties properties, OpenAIREAuthoritiesMapper authoritiesMapper, OpenAIREUserInfoFetcher userInfoFetcher, PropertyReader scopeReader) { this.properties = properties; - this.scopeReader = scopeReader; this.authoritiesMapper = authoritiesMapper; + this.userInfoFetcher = userInfoFetcher; + this.scopeReader = scopeReader; } @Bean public OIDCAuthenticationProvider provider() { OIDCAuthenticationProvider provider = new OIDCAuthenticationProvider(); + if(properties.getKeycloak()) { + provider.setUserInfoFetcher(this.userInfoFetcher); + } if(this.properties.getAuthoritiesMapper() != null && this.scopeReader.getScopes().contains(this.properties.getAuthoritiesMapper())) { provider.setAuthoritiesMapper(this.authoritiesMapper); } diff --git a/src/main/java/eu/dnetlib/loginservice/security/oidc/OpenAIREUserInfoFetcher.java b/src/main/java/eu/dnetlib/loginservice/security/oidc/OpenAIREUserInfoFetcher.java new file mode 100644 index 0000000..6c36d0b --- /dev/null +++ b/src/main/java/eu/dnetlib/loginservice/security/oidc/OpenAIREUserInfoFetcher.java @@ -0,0 +1,28 @@ +package eu.dnetlib.loginservice.security.oidc; + +import org.mitre.openid.connect.client.UserInfoFetcher; +import org.mitre.openid.connect.model.PendingOIDCAuthenticationToken; +import org.mitre.openid.connect.model.UserInfo; +import org.springframework.stereotype.Component; + +import java.nio.charset.StandardCharsets; + +@Component +public class OpenAIREUserInfoFetcher extends UserInfoFetcher { + + public OpenAIREUserInfoFetcher() {} + + @Override + public UserInfo loadUserInfo(PendingOIDCAuthenticationToken token) { + UserInfo userInfo = super.loadUserInfo(token); + userInfo.setGivenName(encoder(userInfo.getGivenName())); + userInfo.setFamilyName(encoder(userInfo.getFamilyName())); + userInfo.setName(encoder(userInfo.getName())); + return userInfo; + } + + private String encoder(String value) { + String decodedString = new String(value.getBytes(StandardCharsets.UTF_8)); + return new String(decodedString.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8); + } +}