Add encoder for UTF-8 in case of Keycloak.

This commit is contained in:
Konstantinos Triantafyllou 2023-04-07 16:49:24 +03:00
parent 2d0bd389e0
commit b6b8e44659
2 changed files with 36 additions and 2 deletions

View File

@ -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);
}

View File

@ -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);
}
}