IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Connexion à Plat'au avec Delphi


Sujet :

Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 9
    Par défaut Connexion à Plat'au avec Delphi
    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...

  2. #2
    Membre Expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Par défaut
    Quelle version de Delphi utilises-tu ?

    Et Plateau, c'est quoi ? C'est où ? Y a une doc ?

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 9
    Par défaut
    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...

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 978
    Par défaut
    Citation Envoyé par Mikey29 Voir le message
    Quel que soit la version le débogueur rest donne le même échec...
    Et si tu donnais plus de précisions.
    On se doute bien que ça ne fonctionne pas comme tu veux.
    Le strict minimum pour qu'on puisse t'aider est de donner le retour que tu obtiens.

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    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

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 628
    Billets dans le blog
    65
    Par défaut
    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

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 9
    Par défaut
    Merci à tous pour vos réponses.

    Voici ce que j'ai dans Postman en autorisation pour obtenir un jeton :
    Nom : Postman.png
Affichages : 400
Taille : 20,0 Ko
    et ce j'ai avec le débogueur Rest de Delphi :
    Nom : RAD.png
Affichages : 401
Taille : 40,1 Ko

    Et si je fais le Step1:#Autorize
    J'ai "Access Denied" en retour...
    Alors que j'obtiens un jeton avec Postman avec ces valeurs...

    ...

  8. #8
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    REST.Client, REST.Types, REST.Exception, REST.HttpClient,
    et

    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

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 9
    Par défaut
    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.

  10. #10
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    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

  11. #11
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 9
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Connexion Firebird avec Delphi error
    Par bulcfr dans le forum Connexion aux bases de données
    Réponses: 4
    Dernier message: 17/01/2014, 00h02
  2. connexion CSV Avec Delphi
    Par adelcrb dans le forum Bases de données
    Réponses: 5
    Dernier message: 21/03/2013, 18h21
  3. Connexion distante à une BD MySQL avec delphi ?
    Par maamar1979 dans le forum Bases de données
    Réponses: 13
    Dernier message: 15/11/2006, 07h57
  4. connexion à oracle avec odac net de delphi
    Par KAHAR dans le forum Bases de données
    Réponses: 7
    Dernier message: 15/05/2006, 15h32
  5. connexion Interbase avec Delphi perso
    Par ptitdragon_eric dans le forum Bases de données
    Réponses: 5
    Dernier message: 16/09/2005, 14h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo