PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → CHORUS: authentification oAuth2 raccordement API PISTE
CHORUS: authentification oAuth2 raccordement API PISTE
Iniciado por Nicolas ROBIN, 23,mar. 2020 18:39 - 2 respuestas
Miembro registrado
87 mensajes
Publicado el 23,marzo 2020 - 18:39
Bonjour.
Suite à la mise en oeuvre du raccordement à la plateforme PISTE, vous avez sûrement dû constater qu'il n'était plus possible de faire de nouveaux raccordement API sur la plateforme CHORUS (bien que les existants restent encore fonctionnels quelques mois).

Je regarde par conséquent comment faire évoluer l'authentification dans ce sens tout en effectuant un minimum de modification dans le reste du code.

Il faudra donc ne plus passer par une authentification par certificat mais par oAuth2 (c'est plutôt une bonne chose, moins contraignant et moins onéreux pour l'utilisateur final).

Il faudra faire attention, j'ai remarqué que les url changent du coup: on n'interrogera plus la plateforme CHORUS habituelle mais la plateforme PISTE si j'ai bien compris.


Si certains d'entre vous y sont déjà passés, pouvez-vous m'éclairer un peu sur les points suivants:
Dans le guide utilisateur PISTE, ils évoquent plusieurs types d'URL (INTERNET, SANDBOX et ADER). Dans quels cas utiliser les unes où les autres; qu'est-ce que ces termes signifient? Je n'ai pas trouver d'explications vraiment explicite à ce sujet, y compris dans la FAQ PISTE.


J'ai voulu faire les tests avec SOAP UI mais je bloque sur l'authentification. Je n'arrive pas à récupérer le token.
Voici ma config:
- Client Identification et Client Secret sont récupérés dans l'application SANDBOX par défaut de mon compte PISTE
- Access Token URL: https://sandbox-oauth.aife.finances.rie.gouv.fr/api/oauth/token









En fait, j'ai essayé de reprendre les mêmes paramètres que ceux utilisés lorsque j'ai fait un test de recherche de structure depuis l'API CHORUS - Structures présente dans le 'BAC A SABLE'; sachant que depuis PISTE, avec ces identifiants cela a fonctionné.

Pour ces tests, il faut que indiquer les logs de l'utiliisateur technique dans le champ cpro-account. Il s'agit de LOG:PWD codé en base 64, soit le résultat de la variable auth_base64 du code ci-dessous que j'utilisais lors de l'authentification avec certificat:
//on crée la chaine user:password
a_encoder=stAuth.sUTILISATEUR_TECH_Login+":"+stAuth.sUTILISATEUR_TECH_MotDePasse
//on encode en base 64
auth_base64=Crypte(a_encoder,"",compresseAucun+crypteAucun,encodeBASE64)
//on crée le header
sHeaderAuth=ChaîneVersUTF8("Authorization: Basic "+auth_base64)



J'aurai préféré valider les tests SOAP UI pour commencer mais n'y arrivant pas, j'ai voulu regarder en Windev.

Là, je me demande un peu comment m'y prendre.
J'ai commencé à regarder du côté des fonctions OAuth2Paramètres et AuthIdentifie mais il y a des paramètres sur lesquels je ne vois pas bien les valeurs à prendre.

Est-ce que je peux adapter l'exemple suivant (https://doc.pcsoft.fr/fr-FR/?1000022212) à un traitement fait avec HTTPRequête plutôt que HTTPEnvoie pour modifier un minimum l'existant?


EXISTANT:
sURL=sUrl_RACINE_ServiceAPI+["/"]+sUrl_API
sTypeContenu="application/json"

//Constitution de la chaîne d'authentification

//on crée la chaine user:password
a_encoder=stAuth.sUTILISATEUR_TECH_Login+":"+stAuth.sUTILISATEUR_TECH_MotDePasse
//on encode en base 64
auth_base64=Crypte(a_encoder,"",compresseAucun+crypteAucun,encodeBASE64)
//on crée le header
sHeaderAuth=ChaîneVersUTF8("Authorization: Basic "+auth_base64)


bufJson_ENTREE=VariantVersJSON(stTypeService.ENTREE.Donnees_JSON)

bResultat_Requete_OK=HTTPRequête(sURL,"",sHeaderAuth,bufJson_ENTREE,sTypeContenu)
SI bResultat_Requete_OK ALORS
bufJson_SORTIE=HTTPDonneRésultat()
//...
FIN


Si vous avez déjà mis cela en place ou que vous avez des pistes (sans mauvais jeu de mots...) vers lesquelles m'orienter, cela m'intéresse fortement.


Merci par avance.


Cordialement,

--

NR
Publicado el 25,marzo 2020 - 11:04
Bonjour,
sacré boîte à chagrin ces API,
Dans SOAPUI, je récupère bien le token avec pour
access Token URl : https://sandbox-oauth.aife.economie.gouv.fr/api/oauth/token
(et pas https://sandbox-oauth.aife.finances.rie.gouv.fr/api/oauth/token)





Je viens enfin de parvenir à consulter un fournisseur avec SOAPUI, c'est laborieux.

Côté windev, rien de probant pour l'instant

Bon courage
Miembro registrado
87 mensajes
Publicado el 25,marzo 2020 - 15:09
Bonjour Philippe,

Oui, on va y perdre la raison avec ces API...
Merci pour ces informations. J'essaierai ça.
De mon côté j'ai essayé d'avancer malgré tout directement en Windev.

Je viens de faire une procédure qui récupère un Token et qui conserve le même Token s'il est encore valide pour ne pas en redemander un si le précédent n'a pas encore expiré.

Si tu as besoin, j'en ai parlé ici:
https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windev/237917-comment-executer-commande-curl-237935/read.awp

Pour les appels dans Windev, ça semble plutôt probant de mon côté.
Ca semble fonctionner avec les API suivantes:
- Rechercher_Structure_par_SIRET
- Consulter_Structure
- Recuperer_Services_Structure



Au moment de l'appel HTTPRequête, voila ce qui change par rapport à l'utilisation de certificat:

sClient_ID est une chaîne
sClient_SECRET est une chaîne
sToken_URL est une chaîne

//...


//on crée la chaine user:password
a_encoder =stAuth.sUTILISATEUR_Login+":"+stAuth.sUTILISATEUR_MotDePasse
//on encode en base 64
auth_base64 =Crypte(a_encoder,"",compresseAucun+crypteAucun,encodeBASE64)
//on crée le header
// sHeaderAuth =ChaîneVersUTF8("Authorization: Basic "+auth_base64)
// sHeaderAuth =ChaîneVersUTF8(ChaîneConstruit("Authorization: Basic %1",auth_base64))
// stTypeService.ENTREE.Header_Auth =sHeaderAuth
sAuth_CPRO_ACCOUNT =ChaîneVersUTF8(ChaîneConstruit("cpro-account: %1",auth_base64))

sClient_ID ="xxxxxxxxxxxxxxxxxx"
sClient_SECRET ="xxxxxxxxxxxxxxxxxx"
sToken_URL ="https://sandbox-oauth.aife.economie.gouv.fr/api/oauth/token"
(stAuth.stToken,sCleToken) =Donne_Token(sClient_ID,sClient_SECRET,sToken_URL,stAuth.stToken)

//Si on n'a pas pu récupéré de TOKEN, on ne cherche pas à exécuter de requêtes aux API CHORUS
//Un message d'erreur est déjà traité dans la procédure Donne_TOKEN
SI sCleToken="" ALORS RENVOYER bResultat

m_stAuthentification_oAuth.stToken =stAuth.stToken
sAuth_TOKEN =ChaîneVersUTF8(ChaîneConstruit("Authorization: Bearer %1",sCleToken))
sHeaderAuth =sAuth_CPRO_ACCOUNT+RC+sAuth_TOKEN
stTypeService.ENTREE.Header_Auth =sHeaderAuth

bufJson_ENTREE =VariantVersJSON(stTypeService.ENTREE.Donnees_JSON)

bResultat_Requete_OK=HTTPRequête(sURL,"",sHeaderAuth,bufJson_ENTREE,sTypeContenu)

SI bResultat_Requete_OK ALORS
bufJson_SORTIE=HTTPDonneRésultat()
//...
FIN


Attention avec sUrl, les URL des API ne sont plus celles de la plateforme chorus mais celles de la plateforme piste, soit respectivement:
- https://sandbox-api.aife.economie.gouv.fr/cpro/structures/v1/rechercher
- https://sandbox-api.aife.economie.gouv.fr/cpro/structures/v1/consulter
- https://sandbox-api.aife.economie.gouv.fr/cpro/transverses/v1/recuperer/services/structure

Il faudra se méfier parce que ça, ça fonctionne avec l'application SANDBOX fournie mais je pense qu'il va falloir créer notre propre application et dans ce cas, je ne pense pas qu'il faille utiliser des URL SANDBOX.

Pour info, dans Donne_Token, j'ai aussi rajouté un test "Si pas InternetConnecté() ALORS Erreur("Aucune connexion Internet active.")" pour ne pas chercher à interroger si on a une perte de connexion.


Bon courage.

--

NR