Pour mettre en place une authentification par JWT sur IBMi, on utilise l’API Qc3VerifySignature.
Le JWT
Il est composé de trois partie :
Un entête (header)
Une charge utile (payload)
Une signature numérique
Pour obtenir la signature, il faut tout d’abord encoder séparément le header et le payload avec BaseURL64, ensuite, on les concatène en les séparant d’un point.
On calcule enfin une signature d’après le header et le payload afin de garantir que le jeton n’a pas été modifié, d’après l’algorithme défini dans le header (RS256, HS256, HS512, …). Cette signature binaire est elle-même encodée ensuite en Base64URL.
On obtient ainsi le JWT : { header }.{ payload }.{ signature }
Préparation
Afin de tester cette API, il faut dans un premier temps générer une clé au format PEM en suivant les étapes ci-dessous :
openssl req -new -out monserveur.csr
Pour créer une demande certificate (.csr = certificat signing request)
Cela crée deux fichiers : monserveur.csr et privkey.pem
openssl rsa -in privkey.pem -out monserveur.key
Cela crée le fichier monserveur.key (clé privée sans le mot de passe)
On crée la donnée à contrôler en concaténant header et payload, séparés d’un point, comme expliqué au paragraphe précédent.
Exemple :
ATTENTION : Il faut, pour être utilisable, que celle-ci soit en ASCII. Pour ce faire on utilise le programme système QDCXLATE qui permet de faire de la conversion de chaines de caractères grâce à des tables système.
Data Structure du format ALGD0400 (algorithme) :
cipher INT(10) inz(50) // Code secret pour RSA , initialisé à 50
PKA CHAR(1) inz(1) // PKCS bloc 01
filler CHAR(3) inz(x’000000’) // Réservé : ce champ doit rester NULL
hash INT(10) inz(3) // Signature Algorithme de Hash 3=SHA256
Data Structure du format KEYD0600 (clé) :
keylen INT(10) // Longueur du certificat PEM
filler CHAR(4) inz(x’00000000′) // Réservé : ce champ doit rester NULL
key CHAR(4096) CCSID(65535) // Certificat PEM en ASCII
Code Retour
L’appel de l’API avec les paramètres choisis , retourne un Data Structure ErrorCode décrite ci-dessous :
bytesProv INT(10) inz( %size( ErrorCode ) ); // ou 64 pour voir MSGID
bytesAvail INT(10) inz(0);
MSGID CHAR(7);
filler CHAR (1);
data CHAR (48);
Dans le cas où la signature est vérifiée, les valeurs retour sont les suivantes
BYTESPROV = 64
BYTESAVAIL = 0
MSGID = ‘ ‘
FILLER = ‘ ‘
DATA = ‘ ‘
Si la signature n’est pas vérifiée, les valeurs retour seront :
https://www.gaia.fr/wp-content/uploads/2021/07/GG-2.jpg343343Guillaume GERMAN/wp-content/uploads/2017/05/logogaia.pngGuillaume GERMAN2021-07-27 23:15:492021-07-27 23:15:51Authentification par JWT (Json Web Token)
Depuis mi-juillet 2021, ce n’est plus un choix le mode FTP simple en anonymous ne fonctionne plus, vous le voyez quand vous allez sur fix central le mode ftps ou sftp est par défaut .
Quand vous faites votre demande vous recevez désormais 3 mails au lieu de 2 – Le premier, pour vous dire que votre demande a été prise en compte. – Le deuxième, pour vous indiquer les instructions à passer pour votre téléchargement – Le Troisième (nouveau) qui contiendra le mot de passe que vous devrez utiliser
Comment faire désormais pour télécharger ces PTFs, on va voir 2 méthodes ?
1) A partir de Filezilla
Le logiciel connait le certificat racine Digicert, donc si vous vous connectez en SSL sur le site delivery01-bld.dhe.ibm.com, il vous propose la première fois de télécharger le certificat.
Et vous pouvez faire ensuite votre téléchargement .
2) A partir de votre partition IBMi
Il va vous falloir installer le certificat racine Digicert et le certificat du site dans DCM qui gère les certificats du coté IBMi.
Il est conseillé pour faire ses installations d’utiliser le logiciel QMGTOOLS.
Nous vous conseillons également de le mettre à jour pour éviter les problèmes.
ADDLIBLE LIB(QMGTOOLS) GO MENU(MG)
Check IBM for updated QMGTOOLS
Vous pouvez donc maintenant faire vos installations
Vous devez dezipper vos fichiers et les copier dans l’IFS de votre IBMi par exemple /temp
Vous allez utilisez la première commande suivante GETSSL pour le certifcicat racine détail ici https://www.ibm.com/support/pages/node/683901 et pour installer le certificat vous allez à nouveau utiliser la commande GETSSL avec le paramétrage suivant QMGTOOLS/GETSSL IP(WWW.ECUREP.IBM.COM) PORT(443) AUTOIMP(Y) STOREPWD(‘votre mot de passe’)
Si vous allez dans DCM vous avez un nouveau certificat installé QMG0001
Vous pouvez désormais vous connecter au site avec la commande suivante
Dans notre exemple, on sélectionne les jobs actifs sur le système, on sélectionne les requêtes SELECT et on trie par consommation descendante !
With job_act (JOB_NAME_SHORT, JOB_USER, JOB_NUMBER, JOB_USER_IDENTITY) as (SELECT JOB_NAME_SHORT, JOB_USER, JOB_NUMBER,JOB_USER_IDENTITY FROM TABLE (QSYS2.ACTIVE_JOB_INFO(DETAILED_INFO => ‘ALL’)) X where substr(job_user_identity, 1, 1) <> ‘Q’) Select qqjob, qquser, qvc102, qqjnum, qq1000, qqi6 as temps_execution from gdata.dump_cache a join job_act b on QQJOB = JOB_NAME_SHORT and QQUSER = JOB_USER and QQJNUM = JOB_NUMBER where substr(QQ1000 , 1, 6) = ‘SELECT’ order by qqi6 desc
Vous pouvez changer vos critères de tri et de sélection, ici on est en mode pompier ? Vous pouvez planifier cette requête et la faire tourner plusieurs fois par jour sur votre système en gardant le résultat ou les dump cache.
Nous avons packagé ce script pour faire une commande WRKSQLJOB que vous pouvez trouver ici !
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2021-07-01 16:02:542022-04-12 12:18:39QCMDEXC en Fonction SQL