AutenticazioneToken.java

  1. /*
  2.  * GovWay - A customizable API Gateway
  3.  * https://govway.org
  4.  *
  5.  * Copyright (c) 2005-2025 Link.it srl (https://link.it).
  6.  *
  7.  * This program is free software: you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License version 3, as published by
  9.  * the Free Software Foundation.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18.  *
  19.  */



  20. package org.openspcoop2.pdd.core.autenticazione.pa;

  21. import org.apache.commons.lang.StringUtils;
  22. import org.openspcoop2.core.id.IDServizioApplicativo;
  23. import org.openspcoop2.core.id.IDSoggetto;
  24. import org.openspcoop2.pdd.config.ConfigurazionePdDManager;
  25. import org.openspcoop2.pdd.core.autenticazione.AutenticazioneException;
  26. import org.openspcoop2.pdd.core.token.InformazioniToken;
  27. import org.openspcoop2.pdd.logger.OpenSPCoop2Logger;
  28. import org.openspcoop2.protocol.sdk.constants.ErroriCooperazione;
  29. import org.openspcoop2.protocol.sdk.constants.IntegrationFunctionError;

  30. /**
  31.  * Classe che implementa una autenticazione token
  32.  *
  33.  * @author Andrea Poli (apoli@link.it)
  34.  * @author $Author$
  35.  * @version $Rev$, $Date$
  36.  */

  37. public class AutenticazioneToken extends AbstractAutenticazioneBase {

  38.     private boolean logError = true;
  39.     @Override
  40.     public void setLogError(boolean logError) {
  41.         this.logError = logError;
  42.     }
  43.    
  44.     private String tokenPolicy = null;
  45.     private String clientId = null;
  46.    
  47.     private void readDati(DatiInvocazionePortaApplicativa datiInvocazione) {
  48.         if(this.clientId==null) {
  49.             InformazioniToken informazioniTokenNormalizzate = null;
  50.             if(this.getPddContext()!=null && this.getPddContext().containsKey(org.openspcoop2.pdd.core.token.Costanti.PDD_CONTEXT_TOKEN_INFORMAZIONI_NORMALIZZATE)) {
  51.                 informazioniTokenNormalizzate = (InformazioniToken) this.getPddContext().getObject(org.openspcoop2.pdd.core.token.Costanti.PDD_CONTEXT_TOKEN_INFORMAZIONI_NORMALIZZATE);
  52.             }
  53.             if(informazioniTokenNormalizzate==null) {
  54.                 return;
  55.             }
  56.             this.clientId = informazioniTokenNormalizzate.getClientId();
  57.             if(this.clientId==null || StringUtils.isEmpty(this.clientId)) {
  58.                 return;
  59.             }
  60.         }
  61.        
  62.         if(this.tokenPolicy==null) {
  63.             if(datiInvocazione.getPa()!=null) {
  64.                 if(datiInvocazione.getPa().getGestioneToken()!=null) {
  65.                     this.tokenPolicy = datiInvocazione.getPa().getGestioneToken().getPolicy();
  66.                     if(this.tokenPolicy==null || StringUtils.isEmpty(this.tokenPolicy)) {
  67.                         return;
  68.                     }
  69.                 }
  70.             }
  71.             else if(datiInvocazione.getPd()!=null) {
  72.                 if(datiInvocazione.getPd().getGestioneToken()!=null) {
  73.                     this.tokenPolicy = datiInvocazione.getPd().getGestioneToken().getPolicy();
  74.                     if(this.tokenPolicy==null || StringUtils.isEmpty(this.tokenPolicy)) {
  75.                         return;
  76.                     }
  77.                 }
  78.             }
  79.         }
  80.     }
  81.    
  82.     public String toStringCredentials() {
  83.         if(this.clientId==null || this.tokenPolicy==null) {
  84.             return null;
  85.         }
  86.        
  87.         return "TokenPolicy-"+this.tokenPolicy+".clientId:"+this.clientId;
  88.     }
  89.    
  90.     @Override
  91.     public String getSuffixKeyAuthenticationResultInCache(DatiInvocazionePortaApplicativa datiInvocazione) {
  92.        
  93.         readDati(datiInvocazione);
  94.        
  95.         return toStringCredentials();
  96.     }
  97.    
  98.     @Override
  99.     public EsitoAutenticazionePortaApplicativa process(DatiInvocazionePortaApplicativa datiInvocazione) throws AutenticazioneException{

  100.         EsitoAutenticazionePortaApplicativa esito = new EsitoAutenticazionePortaApplicativa();
  101.        
  102.         if(datiInvocazione==null) {
  103.             throw new AutenticazioneException("Param datiInvocazione is null");
  104.         }
  105.        
  106.         readDati(datiInvocazione);
  107.        
  108.         if(this.clientId==null || this.tokenPolicy==null) {
  109.             // Nella richiesta non vi sono dati utili all'autenticazione token
  110.             esito.setClientAuthenticated(false);
  111.             esito.setClientIdentified(false);
  112.             esito.setNoCache(true);
  113.             return esito;
  114.         }
  115.        
  116.         // Essendoci l'identita' del chiamante, il client e' stato autenticato tramite il token
  117.         esito.setClientAuthenticated(true);
  118.         esito.setCredential(toStringCredentials());
  119.        
  120.         IDServizioApplicativo idServizioApplicativo = null;
  121.         IDSoggetto idSoggetto = null;
  122.         try {
  123.             ConfigurazionePdDManager configurazionePdDManager = ConfigurazionePdDManager.getInstance(datiInvocazione.getState());
  124.             idServizioApplicativo = configurazionePdDManager.getIdServizioApplicativoByCredenzialiToken(this.tokenPolicy, this.clientId);
  125.             if(idServizioApplicativo!=null) {
  126.                 idSoggetto = idServizioApplicativo.getIdSoggettoProprietario();
  127.             }
  128.         }
  129.         catch(Exception e){
  130.             if(this.logError) {
  131.                 OpenSPCoop2Logger.getLoggerOpenSPCoopCore().error("AutenticazioneToken non riuscita",e);
  132.             }
  133.             esito.setErroreCooperazione(IntegrationFunctionError.INTERNAL_REQUEST_ERROR, ErroriCooperazione.ERRORE_GENERICO_PROCESSAMENTO_MESSAGGIO.getErroreCooperazione());
  134.             esito.setClientAuthenticated(false);
  135.             esito.setClientIdentified(false);
  136.             esito.setEccezioneProcessamento(e);
  137.             return esito;
  138.         }
  139.        
  140.         if(idServizioApplicativo == null){
  141.             // L'identificazione token non e' obbligatoria
  142.             // esito.setErroreCooperazione(ErroriCooperazione.AUTENTICAZIONE_FALLITA_CREDENZIALI_FORNITE_NON_CORRETTE.getErroreCooperazione());
  143.             esito.setClientIdentified(false);
  144.             return esito;
  145.         }
  146.         else {
  147.             esito.setClientIdentified(true);
  148.             esito.setIdSoggetto(idSoggetto);
  149.             esito.setIdServizioApplicativo(idServizioApplicativo);
  150.         }
  151.        
  152.         return esito;
  153.     }

  154. }