IBM App Connect Enterprise — SOAP WS Security con Security Profile e Vault

Andrea Scanzani
Architetture Digitali
6 min readJun 24, 2021

In questo articolo andiamo a realizzare un flusso d’integrazione sulla piattaforma IBM App Connect Enterprise (ACE) che consente di esporre un Web Service di tipo SOAP con il meccanismo di autenticazione di WS-Security.

Le credenziali utilizzate per l’accesso al Web Service SOAP saranno salvate all’interno del Vault configurato sul prodotto IBM App Connect Enterprise (ACE).

Il necessario per seguire questa guida sono:

  • IBM App Connect Enterprise Toolkit
  • Docker, o in alternativa un’installazione del prodotto IBM App Connect Enterprise

Tutto il codice sorgente in questo articolo è disponibile nel seguente repository Git:

IBM App Connect Enterprise

IBM App Connect Enterprise (abbreviato in IBM ACE, precedentemente conosciuto come IBM Integration Bus) è un prodotto di Integration Broker di IBM che permette lo scambio di informazioni tra differente applicazioni. Il prodotto è un Enterprise Service Bus (ESB) e viene utilizzato nelle architetture SOA (Service-oriented Architecture).

IBM ACE fornisce funzionalità per creare soluzioni necessarie a supportare diversi requisiti di integrazione attraverso una serie di connettori per una vasta gamma di origini dati. Un vantaggio dell’utilizzo di IBM ACE è che lo strumento abilita le applicazioni esistenti per i servizi Web senza costose riscritture delle applicazioni legacy.

La versione gratuita per la valutazione del prodotto è scaricabile dal seguenti link.

Creazione e configurazione di un Integration Server

Come prima cosa andiamo a crearci la nostra immagine Docker del prodotto IBM App Connect Enterprise. IBM ha rilasciato la propria immagine ufficiale di prodotto al seguente link.

Purtroppo l’immagine ufficiale non comprende la possibilità di utilizzare la configurazione del Vault di prodotto, pertanto andiamo a creare un’immagine docker custom di IBM ACE, aggiungendo le configurazioni per la creazione del vault:

Come mostrato sopra abbiamo un Dockerfile che estende l’immagine base di IBM e successivamente andiamo a copiare lo script bash, che contiene la configurazione e creazione del vault denominato “ace-local-vault” e la creazione di una credenziale con queste specifiche:

  • Nome Credenziale: myCredential
  • Username: myUsername
  • Password: myPassw0rd

Qualora volessimo inserire più credenziali è sufficiente modificare il file “create-local-vault.sh” e buildare l’immagine.

Per creare l’immagine eseguiamo il seguente comando, nella stessa directory dove sono presenti i file:

docker build -t ace-server-vault --file Dockerfile .

Al termine avremo la nostra immagine Docker con il nome di “ace-server-vault”.

Per instanziare il container dalla nostra immagine eseguiamo il comando:

docker run --name ace-server-vault \ 
-p 7600:7600 \
-p 7800:7800 \
--env LICENSE=accept \
--env MQSI_VAULT_KEY=ace-local-vault \
--env ACE_SERVER_NAME=ACESERVER \
ace-server-vault

Nel comando sopra passiamo la variabile d’ambiente “MQSI_VAULT_KEY” con il nome del nostro vault per far capire ad IBM ACE di utilizzare il vault.

Da browser recandoci sulla console di amministrazione vedremo il nostro Integration Server di ACE attivo.

Per accedere alla console utilizziamo il link:

Ora spostandoci sul tab “Credenziali” vedremo la nostra credenziale creata con il bash script.

Definizione delle Policy di sicurezza

Dal nostro Toolkit di sviluppo creiamo un progetto di Policy e creiamo:

  • Policy — SecurityProfile

Nella Policy appena create settiamo il “Type” a “Security profile” e andiamo a definire quale autenticazione e quali credenziali dovrà utilizzare il flusso per la validazione della coppia username e password.

Lo creiamo come da immagine seguente:

WS-Security SecurityProfile

Nel campo “Autenticazione” andiamo a settare “Local”, cosi IBM ACE andrà a cercare la credenziale specificata “myCredential” nel Vault di sistema.

  • WS Policy Sets and Bindings
Creazione WS Policy Sets and Bindings

Si aprirà una finestra modale ed andremo a creare un nuovo “Policy Sets” (nell’esempio sotto è chiamato “WSSecurity_Custom”) ed impostiamo il valore “uname_token” come “Token Name”.

Policy Sets — WS-Security

Ora creiamo la “Policy Set Bindings”, nel nostro esempio “WSSBidings_Custom” e gli associamo la “Policy Set” appena creata sopra, ed indichiamo che tipo di Policy è, nel nostro caso di tipo Provider in quanto sarà abilitata su un nodo SOAP Input.

Policy Sets — Bindings

Ora il nostro progetto di Policy sarà composto dai seguenti file:

WS-Security Policy Project

Ora possiamo deployarlo sul nostro Integration Server :

WSS_Policy Deploy

Accedendo alla console di amministrazione troveremo il nostro progetto di Policy.

Admin Console — Policy Project

Applicare le Policy ad un’applicazione

In questo esempio ci andiamo a creare la nostra applicazione per testare la configurazione e il funzionamento delle policy di WS-Security.

Creiamo una applicazione (denominata “WSS_Test”) che conterrà un WSDL che andremo ad esporre con un SOAP Input, il Message Flow principale e un oggetto di Mapping.

WSS_Test structure

Il Message Flow sarà così composto:

Message Flow — SOAPInput

Mentre il nostro Mapping implementa la logica del servizio:

Mapping Logic

Ora la nostra applicazione è pronta e non ci rimane altro che applicare le Policy alla nostra applicazione.

Per prima cosa dobbiamo creare un file BAR, successivamente aprendolo dal Toolkit andiamo a cercare il nodo SOAP Input e applichiamo le properties al nodo. Il pattern della stringa per impostare le policy è la seguente:

{PolicyProject}:PolicyName

Nel nostro caso andiamo ad impostare:

  • Policy Set → {WSS_Policy}:WSSecurity_Custom
  • Policy Set Bindings → {WSS_Policy}:WSSBindings_Custom
  • Security Profile → {WSS_Policy}:WSS_SecurityProfile
Policy configuration

Salviamo il BAR e deployamolo sull’Integration Server.

Integration Server Status

Sempre dalla console di amministrazione è possibile visionare la nostra applicazione installata:

Admin Console

Da browser sarà possibile visionare il WSDL:

http://localhost:7800/services/soap/SumService?wsdl

SOAP WS-Security Test

Per testare il nostro sviluppo utilizziamo il tool SoapUI, creiamo un nuovo SOAP Project e settiamo il WSDL del nostro Servizio deployato:

SOAPUI Project

Effettuiamo la prima SOAP Request senza impostare nessuna Autenticazione:

SOAP Request — No Auth

Come vediamo dall’immagine sopra il Servizio risponde con un SOAP Fault in quanto non ha superato l’autenticazione.

Ora sul progetto di SoapUI andiamo a configurare la WS-Security:

SoapUI WS-Security

Adesso impostiamo la configurazione WSS sulla SOAP Request:

SOAP Request — Auth

Come visibile sopra ora il Servizio risponde correttamente, segno che l’autenticazione è avvenuta con successo!

--

--

Andrea Scanzani
Architetture Digitali

IT Solution Architect and Project Leader (PMI-ACP®, PRINCE2®, TOGAF®, PSM®, ITIL®, IBM® ACE).