uncategorized

IBM Websphere Portal 8.5 ed i rule based group

Devo dire che una delle cose meglio fatte di IBM Websphere Portal Server è la sicurezza. In realtà la sicurezza è configurata sull’IBM Websphere Application Server che lo ospita perciò è facile configurare repository sia di tipo LDAP che Active Directory.

Una funzione molto comoda è quella di configurare dei gruppi che abbiano a loro interno degli utenti pescati da una query LDAP.
In sostanza, nel gruppo non si aggiungono gli utenti normalmente ma si crea un gruppo diciamo “smart” che al suo interno contiene tutti gli utenti che soddisfano una determinata query LDAP, ad esempio del tipo:

1
(city=Rome)

La prima cosa da fare è creare una tabella che ospiterà i rule-based group. In questo esempio userò il DB2 come database di backend. Poi, siccome sono molto old school, userò DB2 CLI come client ma la stessa cosa può essere fatta con qualsiasi client di connessione ai database.

1
2
3
4
db2 "create database WPVMM"
db2 connect to WPVMM
db2 "CREATE TABLE SOFTGROUPS (ID INT NOT NULL GENERATED ALWAYS AS IDENTITY, GROUPNAME VARCHAR(128) NOT NULL, RULE VARCHAR(300) NOT NULL, DESCRIPTION VARCHAR(512), LASTMODIFIED TIMESTAMP, PRIMARY KEY (ID), UNIQUE (GROUPNAME))"
db2 "CREATE INDEX SOFTGROUPSIX1 ON SOFTGROUPS (LASTMODIFIED DESC);"

Va prima creato il database e poi la tabella che ospiterà i gruppi.
Come nome database ho scelto VPVMM ma il nome può essere qualsiasi. Come nome tabella ho usato SOFTGROUPS perché è lo stesso usato nella documentazione IBM e non avevo nessun problema ad usarlo.

La cosa da fare lato IBM Websphere Application Server ora, è configurare una risorsa JNDI che contenga la connessione al DB, ammettiamo che la nostra si chiami: wpvmmdbDS

Ammettiamo di avere il profilo del portale installato nel seguente path: /opt/IBM/WebSphere/wp_profile.
Andiamo ora a creare il Custom User Registry all’interno di Websphere usando lo script ConfigEngine.

1
/opt/IBM/WebSphere/wp_profile/ConfigEngine/ConfigEngine.sh wp-create-cur -DWasPassword=<admin password> -Dfederated.cur.id=SoftGroups -Dfederated.cur.adapterClassName=com.ibm.wps.vmm.adapter.softgroups.SoftgroupsAdapter -Dfederated.cur.baseDN=o=softgroups

Potete lasciare tutto così com’è, va solo impostata la password di amministratore di WAS.

Useremo ora lo script ConfigEngine per configurare l’adapter appena creato.

1
2
3
/opt/IBM/WebSphere/wp_profile/ConfigEngine/ConfigEngine.sh wp-create-cur-custom-property -DWasPassword=<admin password> -Dcur.id=SoftGroups -Dcur.name=dataSource -Dcur.value=jdbc/wpvmmdbDS
/opt/IBM/WebSphere/wp_profile/ConfigEngine/ConfigEngine.sh wp-create-cur-custom-property -DWasPassword=<admin password> -Dcur.id=SoftGroups -Dcur.name=dbSchema -Dcur.value=DB2INST1
/opt/IBM/WebSphere/wp_profile/ConfigEngine/ConfigEngine.sh wp-create-cur-custom-property -DWasPassword=<admin password> -Dcur.id=SoftGroups -Dcur.name=dbType -Dcur.value=

Nel campo WasPassword va inserita la password di amministratore di WAS. Come value del datasource va inserito il JNDI name, non il nome della connessione.
Come schema del database ho lasciato DB2INST1 perché è lo schema che si usa di default quando si installa DB2 ma lì ovviamente dovrete inserire il vostro schema.
Nel caso di DB2 il db type deve essere lasciato vuoto, se invece avete un database MS SQL dovrete inserire mssql come valore.

Ora c’è bisogno di indicare all’adapter qual’è la connessione verso il sistema di directory, Active Directory o LDAP.

1
/opt/IBM/WebSphere/wp_profile/ConfigEngine/ConfigEngine.sh wp-update-group-repository-relationship -DWasPassword=<admin password> -Drepository.id=<id connessione LDAP/AD> -Drepository.forgroups=SoftGroups

In questo comando vanno rimpiazzati la password di amministratore e l’id della connessione LDAP o Active Directory già configurata su Websphere Application Server.

Ultimo step, dobbiamo configurare WIM per utilizzare i gruppi rule-based. Editiamo il seguente file: /opt/IBM/WebSphere/wp_profile/config/cells/<nome cella>/wim/model/wimxmlextension.xml ed inseriamo all’interno del tag schema il seguente blocco:

1
2
3
4
5
<wim:propertySchema nsURI="http://www.ibm.com/websphere/wim" dataType="String"
multiValued="false"
propertyName="rule">
<wim:applicableEntityTypeNames>Group</wim:applicableEntityTypeNames>
</wim:propertySchema>

Inserire i gruppi rule-based
Al momento attuale non sono riuscito a trovare un modo user friendly di inserire i gruppi rule-based perciò ho provveduto ad inserirli via insert secca da client DB.

1
2
db2 connect to WPVMM
db2 "insert into SOFTGROUPS (GROUPNAME, RULE, DESCRIPTION, LASTMODIFIED) values ('MyGroupByCity', '(city=Rome)', 'All people from Rome', TIMESTAMP_FORMAT('2017-12-19 15:49:59', 'YYYY-MM-DD HH24:MI:SS'))"

Ora riavviate IBM Websphere Portal e andate nell’interfaccia di amministrazione. Cliccate su “Users and groups” e cercate il gruppo appena creato, se tutto è andato bene vedrete che il gruppo contiene tutti gli utenti che soddisfano la queri LDAP inserita nel record della tabella SOFTGROUPS.

UPDATE: 29.12.2017
Nel peggiore dei modi ho notato che la procedura sopra illustrata (nello specifico il comando ConfigEngine wp-create-cur) va liscia su un ambiente con un nodo solo (ovvero con deploy manager e nodo sulla stessa macchina), su un cluster può dare il seguente errore:

1
Caused by: com.ibm.websphere.wim.exception.WIMConfigurationException: CWWIM5019E Adapter class name is missing or is not valid: com.ibm.wps.vmm.adapter.softgroups.SoftgroupsAdapter.

Dopo aver tirato giù tutto il presepe siamo riusciti a capire che il comando, anche se lanciato su un nodo del portale, viene poi eseguito sul deploy manager che manca di un JAR fondamentale.
Per ovviare a questo andate sul nodo del cluster e copiate il seguente jar:

1
/opt/IBM/WebSphere/AppServer/lib/wp.user.connections.jar/wp.user.connections.jar

dentro la cartella “/opt/IBM/WebSphere/AppServer/lib/“ del deploy manager.
Riavviate il deploy manager, rilanciate il comando ConfigEngine wp-create-cur ed ora dovrebbe andare bene.

Documentazione ufficiale IBM: https://www.ibm.com/support/knowledgecenter/en/SSYJ99_8.5.0/admin-system/rbug.html

Share