Bonjour, est ce que quelqu'un a déjà utilisé Delphi pour se connecter à Plat'au (rest) ?...
J'ai essayé, mais je n'y arrive pas. J'arrive via Postman... Mais mon débogueur rest Delphi ne veux pas... Merci d'avance pour toute aide...
Bonjour, est ce que quelqu'un a déjà utilisé Delphi pour se connecter à Plat'au (rest) ?...
J'ai essayé, mais je n'y arrive pas. J'arrive via Postman... Mais mon débogueur rest Delphi ne veux pas... Merci d'avance pour toute aide...
Quelle version de Delphi utilises-tu ?
Et Plateau, c'est quoi ? C'est où ? Y a une doc ?
Plat'au est une plateforme dématérialisée pour les échanges de donnée d'urbanisme de l'Etat...
PLAT’AU utilise les standards actuels des webservices en proposant des services API en mode RESTFUL,
stateless, au standard Swagger2.0/OpenAPI 3.0 sur un formalisme REST/Json.
https://www.val-doise.gouv.fr/index....6+20200701.pdf
J'utilise différentes versions de Delphi : 10.1 ,10.2 11.1 ...
Quel que soit la version le débogueur rest donne le même échec...
Mes tutoriels
Avant de poster :
- F1
- FAQ
- Tutoriels
- Guide du développeur Delphi devant un problème
salut
as tu verifier que les bibliotheques SSL sont correctement configuré chez toi ?
le plus simple est de mettre dans le repertoire de l'application ces dlls (libeay32.dll et ssleay32.dll)
il y a un exemple d'utilisation de REST en delphi, de souvenir cela ce nomme RestDemo
apres pour nous il est difficile de t'aider plus au vu du peu d'information que tu nous a fournis
Si ça fonctionne avec PostMan alors RestDebugger devrait fonctionner.
C'est certainement plus une mauvaise maitrise de ce programme qu'autre chose, à mon avis une histoire de paramètres ou authentification à saisir dans les onglets idoines
Merci à tous pour vos réponses.
Voici ce que j'ai dans Postman en autorisation pour obtenir un jeton :
et ce j'ai avec le débogueur Rest de Delphi :
Et si je fais le Step1:#Autorize
J'ai "Access Denied" en retour...
Alors que j'obtiens un jeton avec Postman avec ces valeurs...
...
Pour la prochaine fois, tu éviteras de montrer les Clients Credentials !
Même si les GUID sont tronqués sur le premier écran, sur le second c'est carrément en clair !
C'est loin d'être prudent, après tout OAuth2 c'est pour la sécurité et justement éviter l'une des plus grosses failles, l'échange de mot de passe non sécurisé.
Et les deux liens, même EntryPoint pour le Authorize que le Token, c'est étrange !
Aucun Scope ? juste openid
Ton token donc ne va pas servir à grand chose qu'a t'identifier, si l'API gère des routes et des accès restrictifs sur le scope, il va falloir étudier cela.
Ou alors c'est une API openbar ... en gros on colle du OAuth2 pour faire joli sans aucun cloisement derrière.
Tu devrais aussi vérifier pour utiliser la sandbox et non la prod
Pour un Client Credentials, tu n'as pas de Popup de Consentement à gérer mais faut que l'admin ait autorisé l'accès
En prod ça sera toujours du Client Credentials ou tu pourrais avoir du Auth Code avec un écran de consentement pour l'utilisateur + URI de Redirection pour récupérer le Auth Code et le transformer en Access Token + Refresh Token.
Authorize ce n'est pas la même chose qu'un Get Token
Il est tout à fait normal d'avoir une erreur, puisque Authorize permet d'avoir le popup de consentement HTML et de retourner le code à l'URI de Redirection
Mauvaise utilisation, mauvais fonctionnement.
L'assistant c'est uniquement pour le mode Auth Code
l'assistant fourni un navigateur Web intégré pour gérer le consentement
Inutile dans ton cas.
Pour le mode Client Credential, tu dois faire manuellement la requête POST, pas besoin de l'assistant pour cela
As-tu tenté un simple TRESTClient ?
J'obtiens par REST Debbuger la même chose, j'ai un doute sur pkGETorPOST vs pkRequestBody
uses
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part REST.Client, REST.Types, REST.Exception, REST.HttpClient,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 // Dépendance du REST Standard Delphi : IPPeerCommon & IPPeerClient // Sans IPPeerCommon - EIPAbstractError : 'IPProcs is not defined. Make sure IPPeerCommon (or an alternative IP Implementation unit) is in the uses clause'. IPPeerCommon, // Sans IPPeerClient - EIPAbstractError : 'No peer with the interface with guid {E0125434-B354-482C-BD99-7E61623721FF} has been registered'. // TRESTHTTPProcs is implemented with IPPeerAPI. So, IPPeerClient must be used by the application in order to register the actual IPPeerAPI.IIPPeerProcs implementation. IPPeerClient,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 var RESTClient: TRESTClient; RESTRequest: TRESTRequest; Source: TStringStream; ReponseContent: TStringStream; ClientID, ClientSecret, Token, Scope: string; begin ClientID := LowerCase('7BE0CC8D-D343-4D26-A9EF-FE0E31D35B33'); ClientSecret := LowerCase('ACD265BE-EEA1-4BE3-8F9A-E056A2C7F108'); Scope := 'openid'; RESTClient := TRESTClient.Create('https://sandbox-oauth.aife.economie.gouv.fr'); //RESTClient := TRESTClient.Create('https://sandbox-oauth.piste.gouv.fr'); //RESTClient := TRESTClient.Create('https://oauth.aife.economie.gouv.fr'); try RESTRequest := TRESTRequest.Create(RESTClient); // The Client owns the Request (will free it) and it will assign as Client property try RESTRequest.Method := TRESTRequestMethod.rmPOST; RESTRequest.Resource := '/api/oauth/token'; // grant_type=client_credentials&client_id=XXXX&client_secret=YYYYY&scope=openid // grant_type=client_credentials&client_id=7be0cc8d-d343-4d26-a9ef-fe0e31d35b33&client_secret=acd265be-eea1-4be3-8f9a-e056a2c7f108&scope=openid RESTRequest.Params.AddItem('grant_type', 'client_credentials', TRESTRequestParameterKind.pkGETorPOST); RESTRequest.Params.AddItem('client_id', ClientID, TRESTRequestParameterKind.pkGETorPOST); RESTRequest.Params.AddItem('client_secret', ClientSecret, TRESTRequestParameterKind.pkGETorPOST); RESTRequest.Params.AddItem('scope', Scope, TRESTRequestParameterKind.pkGETorPOST); RESTClient.ContentType := 'application/x-www-form-urlencoded'; // inutile c'est pkGETorPOST qui va permettre de calculer cette valeur RESTRequest.Execute; // 400 ! et ce retour n'est documenté nul part, si l'on omet un paramètre ça passe en 401 et en pkRequestBody ça passe en 403 if RESTRequest.Response.StatusCode = 200 then begin if RESTRequest.Response.GetSimpleValue('access_token', Token) then ShowMessage(Token) end else ShowMessage(Format('HTTP Response : %s (%d) %s', [RESTRequest.Response.StatusText, RESTRequest.Response.StatusCode, sLineBreak + RESTRequest.Response.Content])); except on E: Exception do ShowMessage('General Error ' + E.Message); on EHTTP: EHTTPProtocolException do ShowMessage('HTTP Error ' + EHTTP.Message); on EREST: ERESTException do ShowMessage('REST Error ' + EREST.Message); end; finally RESTClient.Free(); end; end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 [Content] HTTP Response : Bad Request (400) {"error":"invalid_client","error_description":"Client authentication failed (e.g. unknown client, no client authentication included, or unsupported authentication method). The authorization server MAY return an HTTP 401 (Unauthorized) status code to indicate which HTTP authentication schemes are supported. "}
Code json : Sélectionner tout - Visualiser dans une fenêtre à part {"error":"invalid_client","error_description":"Client authentication failed (e.g. unknown client, no client authentication included, or unsupported authentication method). The authorization server MAY return an HTTP 401 (Unauthorized) status code to indicate which HTTP authentication schemes are supported. "}
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !![]()
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Super Merci SaiLeTroll,
Les ID clients, ne pas les vrais j'ai mis des GUIDS bidons créés spécialement pour la capture d'écran...
Mercis pour tes infos !
Je vais contacter aussi l'assistance Plat'au s'ils peuvent me fournir plus d'infos.
Je reviendrais pour vous en dire plus sur la connexion quand elle sera ok.
Merci encore à toi et aux autres pour votre aide !
Bon week-end à tous!
Mikey.
Avec ce code et les bons GUID, cela devrait fonctionner !
Si ce n'est pas le cas, il y a un problème, tous les paramètres OAuth de la documentation PISTE sont fournies
J'utilise d'ailleurs un code similaire même si mieux écrit pour Azure, Google et Yahoo!
En gérant Auth Code pour tous ainsi que ROPC et Client Credentials pour Azure uniquement.
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !![]()
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Hourra !
Un énorme merci à vous SaiLeTroll !
J'ai appliqué votre code : et Cela marche !!!
Bon maintenant il faut que passe les autre étapes
Merci et bonne journée.
Mikey
Partager