|
| 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:
a_encoder=stAuth.sUTILISATEUR_TECH_Login+":"+stAuth.sUTILISATEUR_TECH_MotDePasse auth_base64=Crypte(a_encoder,"",compresseAucun+crypteAucun,encodeBASE64) 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"
a_encoder=stAuth.sUTILISATEUR_TECH_Login+":"+stAuth.sUTILISATEUR_TECH_MotDePasse
auth_base64=Crypte(a_encoder,"",compresseAucun+crypteAucun,encodeBASE64)
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 |
| |
| |
| | | |
|
| | |
| |
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 a_encoder =stAuth.sUTILISATEUR_Login+":"+stAuth.sUTILISATEUR_MotDePasse auth_base64 =Crypte(a_encoder,"",compresseAucun+crypteAucun,encodeBASE64)
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 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 |
| |
| |
| | | |
|
| | | | |
| | |
|