Skip to content
CustomIdTokenConverter.java 1.87 KiB
Newer Older
package it.inaf.ia2.gms.authn;
Sonia Zorba's avatar
Sonia Zorba committed

import it.inaf.ia2.gms.persistence.LoggingDAO;
Sonia Zorba's avatar
Sonia Zorba committed
import java.util.List;
import java.util.Map;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.oauth2.common.OAuth2AccessToken;
import org.springframework.security.oauth2.provider.token.DefaultUserAuthenticationConverter;
import org.springframework.security.oauth2.provider.token.store.jwk.JwkTokenStore;

public class CustomIdTokenConverter extends DefaultUserAuthenticationConverter {

    private final JwkTokenStore jwkTokenStore;
    private final LoggingDAO loggingDAO;
Sonia Zorba's avatar
Sonia Zorba committed

    public CustomIdTokenConverter(JwkTokenStore jwkTokenStore, LoggingDAO loggingDAO) {
        this.jwkTokenStore = jwkTokenStore;
        this.loggingDAO = loggingDAO;
Sonia Zorba's avatar
Sonia Zorba committed
    }

    @Override
    public Authentication extractAuthentication(Map<String, ?> map) {

        String idTokenString = (String) map.get("id_token");
        String accessTokenString = (String) map.get("access_token");
Sonia Zorba's avatar
Sonia Zorba committed

Sonia Zorba's avatar
Sonia Zorba committed
        // Needed for Franco's version: access_token is equal to id_token
        if (accessTokenString == null) {
            accessTokenString = idTokenString;
        }

        OAuth2AccessToken token = jwkTokenStore.readAccessToken(idTokenString);
        OAuth2AccessToken accessToken = jwkTokenStore.readAccessToken(accessTokenString);
Sonia Zorba's avatar
Sonia Zorba committed
        String refreshToken = (String) map.get("refresh_token");

Sonia Zorba's avatar
Sonia Zorba committed
        Map<String, Object> claims = token.getAdditionalInformation();

        String principal = (String) claims.get("sub");
        loggingDAO.logAction("Login by " + principal);
Sonia Zorba's avatar
Sonia Zorba committed

        List<GrantedAuthority> authorities = AuthorityUtils.createAuthorityList("ROLE_USER");

        return new CustomAuthenticationData(principal, claims, authorities, accessToken, refreshToken);
Sonia Zorba's avatar
Sonia Zorba committed
    }
}