Webservices avec Oauth2

configuration Apache, Zend et PHP , Web services
Répondre
MattB
Messages : 5
Enregistré le : ven. 22 nov. 2019, 11:33:45

Webservices avec Oauth2

Message par MattB »

Bonjour,

Je dois, depuis l'IBM i, interroger des webservices de l'ERP Infor M3.

J'ai déjà réalisé des tests d’interrogation de webservices via la commandes HTTPGETCLOB et je ne rencontre pas de problème.

Là ou je coince, c'est la partie authentification pour M3 qui utilise OAuth2 pour sécuriser l'application.
Je dois dans un premier temps récupérer un token qui me permettra ensuite de lancer le webservice et d'être autorisé à le faire.

J'arrive à lancer le webservice depuis SOAPUI sans soucis.

En regardant les logs, je vois bien qu'il y a un appel POST (récupération du token) et un autre GET (Appel du webservice).
Partant de ce principe, j'ai tenté d'utiliser HTTPPOSTCLOB pour récupérer le token.
Lorsque je souhaite le faire depuis l'IBM i, je rencontre un problème car j'ai le message :
"SQL Error [38000]: [SQL4302] Abandon de la proc. stockée ou fonction UDF Java SYSTOOLS.HTTPPOSTCLOB, nom spécifique HTTPP00013. Exception : com.ibm.jsse2.util.h: PKIX path building failed: java.security.cert.CertPathBuilderException: PKIXCertPathBuilderImpl could not build a valid CertPath.; internal cause is:
java.security.cert.CertPathValidatorException: The certificate issued by SERIALNUMBER=<numéro_de_serie>, CN=TST-Grid is not trusted; internal cause is:
java.security.cert.CertPathValidatorException: Certificate chaining error."


J'ai l'impression que le certificat de l'application n'est pas reconnu.

Est-ce que l'un d'entre vous a déjà rencontré ce problème ?

Merci pour votre aide

nbonnet
Messages : 52
Enregistré le : mar. 11 sept. 2018, 08:20:13
Localisation : Lyon

(sans sujet)

Message par nbonnet »

Bonjour,

oui, il faut que les autorités de certification soient connues du runtime Java qui implémente les fonctions HTTP* de SQL.

Vous pouvez regarder la documentation suivante : https://www.ibm.com/developerworks/comm ... _udtfs.pdf
au chapitre "Using a truststore and keystore for SSL"
Nathanaël

CIQPGMR8
Messages : 10
Enregistré le : ven. 24 févr. 2012, 15:42:28

(sans sujet)

Message par CIQPGMR8 »

Bonjour,

le lien vers la doc Volubis qui explique pas à pas comment ajouter un certificat dans le magasin de certificats de Java (il faut juste adapter la version de java).
http://www.volubis.fr/af4dir/courshtm/w ... ent73.html
Attention, il faut récupérer le certificat "racine" et le certificat "intermédiaire".


Cordialement.

MattB
Messages : 5
Enregistré le : ven. 22 nov. 2019, 11:33:45

(sans sujet)

Message par MattB »

Si je comprends bien, il faut d'abord que je récupère le certificat utilisé par M3 pour le copier sur l'IBM i.

Je vais tente de le faire et je vous tiens au courant.

Merci

MattB
Messages : 5
Enregistré le : ven. 22 nov. 2019, 11:33:45

(sans sujet)

Message par MattB »

Bonjour,

Ça fonctionne mieux depuis que j'ai intégré le certificat de l'ERP.
J'ai réussi à passer la première étape qui consiste à récupérer le token.

Là je coince sur l'appel du webservice qui est sous la forme :

WITH t_Authorization AS (
SELECT CAST('
<httpHeader>
<header name="Authorisation" value="Bearer <token_récupéré>"/>
<header name="content-type" value="application/json"/>
<header name="Accept-Encoding" value="UTF-8"/>
<header name="accept" value="application/json"/>
</httpHeader>' AS varchar(2048) CCSID 1208) AS Authorization_Identity
FROM SYSIBM.SYSDUMMY1
)
SELECT systools.httpgetclob('https://<URL_webservice>',
CAST(Authorization_Identity AS clob(10k)))
from t_Authorization;

J'ai une erreur http 401 unauthorized
Lorsque je lance la méthode GET depuis SOAPUI avec les mêmes paramètres et le token que j'ai récupéré précédemment depuis l'IBM i ça fonctionne.

Quelqu'un aurait une idée de ce qui peut créer le dysfonctionnement ?

Merci pour votre aide

MattB
Messages : 5
Enregistré le : ven. 22 nov. 2019, 11:33:45

(sans sujet)

Message par MattB »

Je viens de trouver mon erreur :
avec Authorization au lieu de Authorisation ça fonctionne un peu mieux :D

WITH t_Authorization AS (
SELECT CAST('
<httpHeader>
<header name="Authorization" value="Bearer <token_récupéré>"/>
<header name="content-type" value="application/json"/>
<header name="Accept-Encoding" value="UTF-8"/>
<header name="accept" value="application/json"/>
</httpHeader>' AS varchar(2048) CCSID 1208) AS Authorization_Identity
FROM SYSIBM.SYSDUMMY1
)
SELECT systools.httpgetclob('https://<URL_webservice>',
CAST(Authorization_Identity AS clob(10k)))
from t_Authorization;

Merci pour votre aide

Répondre