Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Faciliter les développements en intégration/dev pour les API France Connectées #15

Open
guillett opened this issue Apr 20, 2023 · 6 comments

Comments

@guillett
Copy link
Contributor

Je trouve l'expérience de développement des API France Connectées assez laborieuse.

En effet, @skelz0r disait sur Mattermost

[...] il n'est techniquement pas possible de faire des tests E2E pour le moment (car il faudrait accorder les données de tests de FC avec des potentiels données de tests pour chaque FD, ce qui est compliqué et pas forcément adapté à tout le monde).

La chance qu'on a en dev sur FC c'est que clientID et clientSecret sont publics et donc les subs sont partagé avec tout le monde.

Plutôt que de passer par le token mesri (ou cnous), est ce qu'il serait possible de repliquer ce qui se passe en prod en se basant sur un dictionnaire dont les clés sur les sub de dev FC.

Par exemple pour 'Angela Claire Louise DUBOIS' de FC, dont le sub est b6048e95bb134ec5b1d1e1fa69f287172e91722b9354d637a1bcf2ebb0fd2ef5v1 (pour le clientID/Secret public), on pourrait faire correspondre un payload donné pour les API France Connectées que vous gérez. Par exemple, pour api-statut-etudiant :

{
   "dateNaissance" : "1962-08-24",
   "ine" : "1234567890T",
   "inscriptions" : [
      {
         "codeCommune" : "33063",
         "dateDebutInscription" : "2020-07-01",
         "dateFinInscription" : "2021-08-31",
         "etablissement" : {
            "nomEtablissement" : "LYCEE GENERAL ET TECHNOLOGIQUE CAMILLE JULLIAN",
            "uai" : "0330023W"
         },
         "regime" : "formation initiale",
         "statut" : "inscrit"
      }
   ],
   "nomFamille" : "DUBOIS",
   "prenom" : "Angela"
}

On peut envisager un ou plusieurs fichiers yaml. Par exemple, avec un seul fichier, il pourrait ressembler à ça

---
b6048e95bb134ec5b1d1e1fa69f287172e91722b9354d637a1bcf2ebb0fd2ef5v1:
  mesri:
    dateNaissance: '1962-08-24'
    ine: 1234567890T
    inscriptions:
    - codeCommune: '33063'
      dateDebutInscription: '2020-07-01'
      dateFinInscription: '2021-08-31'
      etablissement:
        nomEtablissement: LYCEE GENERAL ET TECHNOLOGIQUE CAMILLE JULLIAN
        uai: 0330023W
      regime: formation initiale
      statut: inscrit
    nomFamille: DUBOIS
    prenom: Angela

b6048e95bb134ec5b1d1e1fa69f287172e91722b9354d637a1bcf2ebb0fd2ef5v1 est donc le sub. sub récupérable par un appel à ${fcRoot}/api/v1/userinfo?schema=openid et dans le JWT du champ id_token. Par exemple

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2ZjcC5pbnRlZzAxLmRldi1mcmFuY2Vjb25uZWN0LmZyIiwic3ViIjoiYjYwNDhlOTViYjEzNGVjNWIxZDFlMWZhNjlmMjg3MTcyZTkxNzIyYjkzNTRkNjM3YTFiY2YyZWJiMGZkMmVmNXYxIiwiYXVkIjoiMjExMjg2NDMzZTM5Y2NlMDFkYjQ0OGQ4MDE4MWJkZmQwMDU1NTRiMTljZDUxYjNmZTc5NDNmNmIzYjg2YWI2ZSIsImV4cCI6MTY4MTk5NzEyOCwiaWF0IjoxNjgxOTk3MDY4LCJub25jZSI6InRwSHdrS0ZONm00dkMwYkRmN1dndVVkMDRlLU9LOHZaeUhXWmZzSTExY3N6VUZxQmFLNG1yQkhVZ1dScW92MVQiLCJpZHAiOiJGQyIsImFjciI6ImVpZGFzMSIsImFtciI6bnVsbH0.g2B22UYDm3HN_6N5UxDhq_Uc-NFTeKV4qvDitKuBLAc'

et dont le contenu est

{
  "iss": "https://fcp.integ01.dev-franceconnect.fr",
  "sub": "b6048e95bb134ec5b1d1e1fa69f287172e91722b9354d637a1bcf2ebb0fd2ef5v1",
  "aud": "211286433e39cce01db448d80181bdfd005554b19cd51b3fe7943f6b3b86ab6e",
  "exp": 1681997128,
  "iat": 1681997068,
  "nonce": "tpHwkKFN6m4vC0bDf7WguUd04e-OK8vZyHWZfsI11cszUFqBaK4mrBHUgWRqov1T",
  "idp": "FC",
  "acr": "eidas1",
  "amr": null
}

(signé avec le clientSecret d'ailleurs mais on s'en fiche un peu ici).

@skelz0r
Copy link
Member

skelz0r commented Apr 21, 2023

Si je résume: il faudrait que notre système de récupération des données FranceConnect tente de taper sur la version de test de FranceConnect avec le bearer token.
Si il y a un résultat, on en extrait le sub qui servirait de clé unique pour faire un matching pour un endpoint FranceConnecté.

L'idée est intéressante, mais peut-être un poil complexe.

Pourquoi on ne s'arrête pas à juste faire le call sur la version de dev de FranceConnect, et faire matcher les données de la database.

Avec ton exemple, on mettrait comme payload pour le statut étudiant:

---
params:
  given_name: "Angela Claise Louise"
  family_name: "Dubois"
  birthdate: "1962-08-24"
  gender: "female"
  birthplace: "75107"
status: 200
payload: |-
{
   "dateNaissance" : "1962-08-24",
   "ine" : "1234567890T",
   "inscriptions" : [
      {
         "codeCommune" : "33063",
         "dateDebutInscription" : "2020-07-01",
         "dateFinInscription" : "2021-08-31",
         "etablissement" : {
            "nomEtablissement" : "LYCEE GENERAL ET TECHNOLOGIQUE CAMILLE JULLIAN",
            "uai" : "0330023W"
         },
         "regime" : "formation initiale",
         "statut" : "inscrit"
      }
   ],
   "nomFamille" : "DUBOIS",
   "prenom" : "Angela"
}

Avec une itération sur le README + du bon naming sur les payloads (voir même un lien vers la ligne correspondante dans la database) je pense que c'est une itération suffisante pour faire du E2E ?

@guillett
Copy link
Contributor Author

Je pensais que c'était possible mais FC en dev respecte les scopes fournis.

Dans mon cas, je n'ai que email, birthdate et sub comme scope et donc champs dans le payload réponse de FC. Ça semble donc impossible de faire un match sur les propriétés non récupérées (et en plus j'aime pas trop les matchs sur des champs pas nécessairement unique, même si dans ce cas j'étais près à jouer la carte de la simplification).

Je suis d'accord avec toi, c'est un peu compliqué mais je ne vois pas trop comment faire de mieux.

J'ai écrit au support partenaire de FC pour leur demander si les sub (pour le clientid/secret public) pouvaient être ajoutés à la database (pour améliorer la découvrabilité des profils avec des données intéressantes).

@skelz0r
Copy link
Member

skelz0r commented Apr 21, 2023

Je pensais que c'était possible mais FC en dev respecte les scopes fournis.

Comment ça ?

En parlant de scope il est vrai que je n'ai pas pensé à ça, techniquement ça ne peut donc pas marcher (j'étais étonné de ne pas avoir pensé à ça en écrivant mon commentaire précédent, je comprends mieux maintenant).

J'ai écrit au support partenaire de FC pour leur demander si les sub (pour le clientid/secret public) pouvaient être ajoutés à la database (pour améliorer la découvrabilité des profils avec des données intéressantes).

C'était principalement mon gros point de blocage, si c'est ajouté sur la db je suis enclin à implémenter cette solution, qui comme tu le précises n'est pas simple mais semble être le meilleur moyen en l'état pour faire du E2E.

Tiens moi au courant de l'issue de ta requête auprès de FC.

@guillett
Copy link
Contributor Author

guillett commented Apr 21, 2023

Je n'ai pas attendu la réponse de FC, j'ai joué avec Playwright, ce que je voulais faire depuis un moment.

https://github.com/guillett/franceconnect-public-subs

mapping.csv

id sub
1 b6048e95bb134ec5b1d1e1fa69f287172e91722b9354d637a1bcf2ebb0fd2ef5v1
2 dcc2d409424c519ae0599c8585b585711020bd4035b91633e9eabaa9b7542721v1
3 3d3d2083c9c8cc5f321ba8f24e13f570ef9aedf550d8e3997a3908ff81ee0244v1
4 6a7bec9f9771d19526680ad59199da62169abbdd4ae5f18c185db49e710f883fv1
5 59031f116b385bea6d8d3cb24ac449bdcf3330c87ba31b3b5113e30f5027a307v1
6 5c9c36995efdedfa5a93eff2d9cf1862106054fdf36a446fb05bd75723a2efa6v1
7 b5c46c34bd26cde8bbd19f6798f6472fa1ab6274fb405aea277dbdc47e65123fv1
8 4faf9c04d4d92dfc2c1c5b93e26028c70b124d58f7f7123686043a65366a2cd7v1
9 e5d8a21e6291efdf47f9681dc1654807ad4c346fc2df9fe4e965ecd913684452v1
10 5d8ccdbe1b65ab7f7baeb59f4268bb5f8ed4c1cb7be655bb37071b2fd507e01fv1
12 f4527a9af85eea70a87513d64811a10533f054661b4e3eba637664e7ba5e6d9fv1
13 fc7fbc9db9af8c6a5ab92c471d645b832e52ecae3ce3807b017b34216f52d8aav1
14 f2d57924298e3e49baf44ea716e93271004b197fcc3cea3bb5586e76745cfe77v1
15 5a9baa0d1263d6def993b13b219e65370aa70ac5863c6c22ff17044656b06021v1
18 be5dd678f9258320899467e4e0b4a21e4df8771fab3292e0f95adf1361a1674cv1
19 d33cb8f75ab68eec8ca88f0c68e273e484d9ea5c6823e7acbec817adf543e0b0v1
20 f45fef45d647191092e4e4ec44b9aa866117646bb158486f73594ac5a27c17d6v1
21 f2042915c67870483b2d805b1fe2b9be5cf043e89813c131f4746671c5dd1a98v1
22 7473fc9b7212bdbd2baa7d7257ad483839c9b51835e81c0b74e2996df78af668v1
23 63e1b5e5192addd84fa4c424ff547653c4922e950cdef2835013c907b3156b77v1
24 00d392880c79fe04e265b53b256c2fee95a29b6d4a0e112db8ba21ff8ea83021v1
25 e0566743e27daf644d81aa609ed59a1bcf0f351f36f8106a6f4e864966d06167v1
27 f702e717abc29ba126a9391dc80a1d827a3cd56b754ee66336e43271a31969ccv1
28 d1300d20ddf940da4b8cfb2c1354d2b1d9cce7cc85c0bc49507c0cac82f8a997v1
29 00628250c590871880993b57519a5b70187150225c90bbded2153feff0f6a750v1
30 692a92775aa44f1fa8be421fd46d07537be711be8120ca3de53232ef8988fc22v1
31 de94c4e8010eccab1357fb6372d8af81d6dcd20cfbd98da503cc731e1dd7afa4v1
32 3e1734bbe3f83c46031a9880b5923ee96bfe0fda1f69530721472ca595ff02d2v1
33 dc5387c04b4c7da43bc480537af7a99c5505fe2b386c24438d44ea5adb4ba2aav1
34 d707a98e5ea373832c9b0ada2906319b40a53f611750e772f0f4c58d1c9e9663v1
35 a68a86cfbac4089ec40253f136c89119f63219998041b1a2eb774cb3965fb563v1
37 1f88b592c5ce7b6c1a3cda18f728569f305a8e9d38985ce2575a2fa7d8ea2026v1
38 87307c58714f0afb2a23e0455d799d09ea1237fe4681b012355239ba8b6696f3v1
62 b31afba9aee83824df1e6085e241d8df2684715550035e0ba346670aabe72c87v1
63 e399b9be5e7f995fed8b47327b566c7b473096e8f17949a52b96a6f575ce4f9ev1
64 b67a3ea3f9bd8db1c50641e879ec3850ae5db36d3007a2b9f827d5260a5e21fav1
65 e45c1d24348e52b6cc6828a044746ef7b7b13acb8ca5f90cfbdade950640316bv1
67 fa0009c32fb0d5b83c105b48a0dee57c649dbec706fd821337479efd51730ba3v1
77 3f6e7b893e4fb8d6294016eaf05226f1628381d963c2b3151cea62b3cd64de03v1
78 1493468fff8bdff593935305a59a417decf43f9d52841698098d5a1580962ff3v1
79 1ae74bcdfe199e811bb4846355c9748069851c14b41d3eae44d44c601cd6f8b2v1
80 d4ab1775eb605b33dc785a14ea55dcba386a53c80a69a735dd7128ea750e184bv1
81 c6c87c16b0586daa95f9bc60794ac412ab145137423283bb3d0719562fcf1b36v1
82 5ba4970a7c859b29e156764eb9129c23ca8fe440c195ea6386a304464eb14e58v1
83 3ca9ac5de1482b9f4531e5eb468b16caad8bfc08c40cfd53b4167762e54fafdav1
84 612fa74604c9449489147ab1923eadb7df0ec3bc8fdf33113476a84a81f7ffd7v1
85 ef494fcd0d9a4cb24bb0fea9d4a3d1e0add9787d0b9128f2627408b27ec0fed4v1
86 aab9f889b97dc3fea67f7ec82f08e3a40e890a2f1a1b4e3c674b3f7bdf8bb858v1
87 a7360db8f4668a2d76a6dad10023c14c4fecec24fa9c725d72ac5b93a703b21fv1
88 8b312c65ba26d09f21a751f22ad29e8189177866c74510600941dcd983ad0ffev1
89 14faec7beae1b5a61617c73e5d8a38a5e83b80a81f501656e3a58600f0f36a50v1
90 032e860c2ce63de14bdb54557aafef68f02cbdfd73131a510f3e1aee180a3ab0v1
91 06da7c1ab96d7a0413ace58d527540003d22b0dfdbd0a3a459f8e6e43adee496v1
92 98aa9e0473aaac698873d42c3e32f6594fabc83bfa8b4f083158d0ac274ab0b2v1
93 552d07d79de424d8279747d569a4bcd4ebdafaf0c72c69aba9de362f8bfb60aav1
94 617eff0df00e876f3145fa637d47550843027fa097466cab6d0be839348fbad9v1
95 d6b125856a3249812b2cd8b44afc9925a8fbb34942afa00f65c3c7bea6d104cbv1
96 6f4328c0c4923effd6ee6a4af580934616c82b2dacefff007d5d9dcd0781c707v1
97 2efb828a56d38ad3a767e26bb94629550ace84975fcf2e828af0537dc3c877fev1
98 3692eb7c1a218504f86a50d1546658580f2701d1abdeeff0ec1f8afa17815e00v1
99 f2556f5d676a8fdac5278df1e31a44ab338fa40abeda9d0547c4068019fba14fv1
100 31a4ce2812edb524b13699c7bcfbe55e0722915dfbbf575d492798b43232551cv1
101 7a23f715198ccd719398de85b1ca57f5a5b3bf421ca4dc329d84c6f8d368d454v1
102 5ba4970a7c859b29e156764eb9129c23ca8fe440c195ea6386a304464eb14e58v1
103 9f119bf815b701c57dec0d5c6b9718d7ebf679eceecbb7c279de4842bcb1b4e9v1
110 fc926156c1b58274ee7e98f192a389bb3001fb9cf41ecedc65d97225ee4c994bv1
111 8b34f56124d061d9506e2d78167aad43ab045aafbefde517cbbcdc4e6f63c3c6v1
115 82c1c95d069ff025b4a1b3ec40511ea2f24a8036ffa5d3665ccb2f2ec2eb4188v1
116 6b9ced672e66390a81f2b6a33a60336e9cb64ddea4595ac89f936ea3e896840dv1
117 b3020f763df813f29f55a8204c356f2d9884ef4485ecd2a78e410115c9aaf144v1
118 ffa31ed9c6c3e75f3b66a3875f2a9d31a14aae543672350af9067c9a31111fc8v1
119 14c4fce7a0bcc3b4b85ef4505d3e35129e5b8ba792c91c34cae03d969fe68740v1
120 831d9fa5335f5619f6ff1146b0c9fba802ada7c9881b5a75911a4028c990536cv1
121 d90bb64dbc7133bb1a2ec5696ac59fc7d922b8f3d4f51c57f88a0da108a4b537v1
122 229e2097113d281333a5eb5aadc899721c1fc1fcdd50d69ae9f8dc9651a70630v1
123 5ef7abc02d18b1f2275fd4553071bcdf95a1bba60f94cf8bd65c58f3b7db47d3v1
124 954a79694f545389e8a14ff87705bccdae76119f3a6c8d767e9f164c21be6353v1
125 4eb793ffdfd08b1da549e2fd1579dcaa61743b8ef7f234b44005340be39f7fd1v1
126 bb75c187baf734f808f499b48e6adff8c7a9acda75de775f02100c0f18f24743v1
127 891f95e179a3a5a636aa4ee1bd526d54ff0032b3b08b3d0b6a709a5f6d592567v1
128 f275cce912c55e0a95a59d9f2fcef9730f0ad96fc20867bc29c40fca3786c37cv1
129 e76b0e96ff8d37753ba49ff627bff509a859e4327ec9d1a08f2f698c499637c8v1
130 f2042915c67870483b2d805b1fe2b9be5cf043e89813c131f4746671c5dd1a98v1
132 73135166f3bd253c5dd9d54a82fd678fd1ad61dd4937bcc369479b5b8a061557v1
133 13b3aad7cf0e928db2bd869ac255273c67bbb4bbe65678a2bafdcdbbbac63a9fv1
134 fc4c82f4e8242918f3fb579bbb7badb27fefcaa49687454a477f9633bf312573v1
135 36c02969e86b47c863632c87d94104b5a773959056f8b43782f9fdaf4b34c929v1
136 98a27a39f4a37dd2355cee9792453add7ed0938db21e692fb479acda61dc1f3ev1
137 fd3685d7398e0e7bccd4bb74179da23075984d4a3648a1750987ec85a755d901v1
138 f193e9d0a9cdcff9034180d5a64f1e9142e7153fe79202f1afdbaccf45b617bev1
139 9c1abe0b797a096f857073cd9fd44f3ac2988fb771a80d7e9b1ed74c500fae2av1
148 831aef303f2cf2ad2f72bc044361d1e09e236caf08d3a16fbf2e680f07b767a4v1
149 4482880f0f78d3253b7dbbb57c4843d9e78680f5b79b223af5d3d0d1e12ccbe0v1
150 cd45b27b447c1aaf9f76ef1c2a45d441a0797f5224346d17355383cf78eb4e57v1
151 41b41ec5d53f924268447801440d1345797f30024cdc1a88045a760407785497v1
152 288873343ac15a295f517d2eff04a6d4345096f0b86aee4e8a3b3b9f1bf1bc2dv1
153 b624a55170f60b2e22041f080ed3f2070da7b36668353dec830ce74ae274241fv1
154 cb7c5f3b02236a21802d0fb35c86ba524f90db4eb24c8578f8bd914af39457ffv1
155 0d9352e6c57029c77dab21b4e7239a979285d3bb0285279014e527688ad7e9bbv1
156 52293482a128a5020d453efa6e65d11d78c68c46797d254f82c1a88a2436397dv1
157 66ad9ab22317167055d77c43359347ae07bf1d8a6305430b1616cd5d556b7a06v1
158 bb845a025836e9e3dd98e760deba0c36b43d834841154d8e4e7eb48800fd5a82v1
159 c5b391b24ebe869473c125407357d141be006d47045c1715bea4fea2ac72b41bv1
160 a7e35d26521e7589f0c0a565424d58a1bcaa0f8b94fb8659ad05f83225d30757v1
161 b796137def379f0e0456a6413714e7348817d2d015ebffe3d35129ad72c4ea05v1
162 da3850c074645dcd39a4460274f88a3f5ca1ab1b00f351bbaace2588cccbd86ev1
163 d14aa931db42d15c7f88286239d7bc2a59abd7c8201173a28312c123b24a24a6v1
164 86dba4cc028b21916abf07ca6105058f929d319aea5154a2ab796da3c73e215av1
165 b90f7fc612944d92946eba5575afa6189784b4d4abb2c9cc35ad41cdad92f4d3v1
166 51014bb8666364dce3867836858ca0049d1cba326e70450a784c5a8b49ac5a86v1
167 d36493d084db32130a2e293539aa60f82409a7c85573c0780290cc190b01270ev1
168 8c7098b5e20ca54800f0b833482e486b6a74e23bc2c309f7d78fe41a26440559v1
169 c6404579cb8ddfe6cb1583ac51f801fa82457bf0a18110bdc3caaad8883037a1v1
170 9e7923168f72e5a1c2eb0db8741070b10df569017b478762fc645f39d6165b65v1
171 ff675c13f16a69c249efdbd78440bc87e1b012e8a278472cab58702e9d440e2ev1
172 dabe44d1f28b7d3c8be751e3a4d617a202461675fe08f6ac89cdc9cfea638720v1
173 3afe9907f5b84bae0074cf95fc82cf8b07829cc761f70485227713a6ba65805ev1
174 9a5bff307fbe2103e83538cb11f4c0236b62e5b17f72163088c5ba9094d59149v1
175 7df58bf91995415a824b909811ac3b8c1f62a33e99b63616df5a9300da4f0c35v1
176 ef16a4e6933713fc6392488b065505de29d29d39644fa346e5f58d95536760eev1
177 7078893820ba058a2ab650cd6f1c77a842779b0a67e81ae2d876e700d03e01ebv1
178 f996d1eb04d61e57edd81854a3998d719b1845aa35a4a76e21e096cd51cb8c75v1
179 5b5ec2256defdb7170e97b5afd83aaa81efaea212ab21a32a0547bff4642df67v1
180 f1b7211dacbbf54be1471aa3195eca43c2d51145ba136529660182e8fc39b62fv1
181 1e186ec773dd90e05750623252e93a0e50e002c365d687e2891c7f39d4c84b3ev1

@skelz0r
Copy link
Member

skelz0r commented Apr 21, 2023

Stylé !

Tu penses que c'est envisageable de faire une PR sur le dépôt de FC ? Ça me permettrait d'éviter de lookup sur 2 dépôts différents.

@skelz0r
Copy link
Member

skelz0r commented Apr 21, 2023

Ou alternative: tu le fais sur ton propre dépôt (même si c'est peu idéal pour une question de maintenabilité). Perso ça me va si je n'ai pas besoin de sourcer N fichiers (et donc avoir des incohérences de données).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants