problème d'encodage requête Http

Home Forums Convertigo Products problème d'encodage requête Http

This topic contains 7 replies, has 2 voices, and was last updated by  etienne.gabard@econocom.com 8 months, 3 weeks ago.

Viewing 8 posts - 1 through 8 (of 8 total)
  • Author
    Posts
  • #235946

    Bonjour,

    Nous avons un soucis sur une transaction http d’authentification.

    L’appel REST, implémenté dans le connecteur Convertigo, fonctionne très bien la majorité du temps mais lorsque le password contient un caractère particulier (nous avons détecté le problème quand un + était présent), nous avons un retour négatif du serveur d’authentification.

    En passant par Postman ou un navigateur avec les même identifiants, la requête passe et l’utilisateur est authentifié.

    En comparant les paramètres entre les différents outils nous ne voyons pas de différence. la transaction et les variables sont bien en POST, le Content-Type est bien en application/x-www-form-urlencoded, le password passé en variable est correct.

    Nous pensons qu’il doit y avoir un mauvais encodage quelque part, peut être un paramètre convertigo qui manque ou qu’il faut changer ?

    #235949

    Gregory Vorbe
    Moderator

    Bonjour,

    De quelle manière faites-vous l’appel à la transaction HTTP (appel client) ?
    S’agit-il d’une authentification simplement en envoyant des variables user/password en POST ou utilisez-vous les paramètres d’authentification du connecteur HTTP ?
    Pouvez-vous nous transmettre l’extrait des logs Convertigo sur l’appel à la transaction et les paramètres reçus ?

    QA&Support

    #235955

    Bonjour,

    On fait appel à une séquence depuis notre application angular avec le SDK convertigo :
    this.c8o.callJson('.SSOLogin', "cp", cp, "password", password)

    Cette séquence s’occupe ensuite de l’appel à la transaction Http.

    C’est une authentification avec envoi des variables user/password en POST. J’ai ça au niveau des logs pour l’appel à la transaction :

    
    <?xml version="1.0" encoding="ISO-8859-1"?><input>
        <transaction-variables strictMode="true">
            <variable name="UserName" value="SomeUser"/>
            <variable name="Password" value="******"/>
        </transaction-variables>
        <transaction-headers/>
        <javelin-action/>
        <webviewer-action/>
    </input>

    En cherchant dans les logs j’ai trouvé un endroit ou le password avait été changé, le + s’était transformé en espace. Je ne sais pas à quoi correspondait ce log, d’où il venait ni s’il a un impact particulier mais ça pourrait être la raison du problème.

    #235958

    Gregory Vorbe
    Moderator

    Bonjour,

    En utilisant la méthode HTTP POST avec l’entête Content-Type à application/x-www-form-urlencoded les caractères doivent être encodé.
    Un ‘+’ correspond à un espace, il doit être encodé en ‘%2B’ pour être transmis dans le corps de la requête HTTTP POST comme un ‘+’.
    Vous pouvez utiliser la méthode Javascript encodeURI(string) dans votre transaction depuis le handler onTransactionStarted() sur vos variables à envoyer à votre API HTTP ou encore plus en amont dans une séquence avec un Sequence_JS step avant le Call à la transaction.

    QA&Support

    #235963

    Gregory Vorbe
    Moderator

    Nos réponses se sont croisés !

    Dans le cas du SDK angular vous pouvez directement encoder la variable lors de l’appel à la séquence :
    this.c8o.callJson('.SSOLogin', "cp", cp, "password", encodeURIComponent(password))

    QA&Support

    #235998

    Bonjour,

    J’ai testé les différentes méthodes mais rien n’y fait. Je vais quand même continuer dans cette direction.
    Dans le OnTransactionStarted je modifie les variables mais j’ai un doute sur le fait que ça les modifie réellement, si je met un log je vois que l’encodage se fait mais je ne vois pas de différence ensuite. Je m’y prends peut être de la mauvaise manière, je fais simplement de la façon suivante :

    Password = encodeURIComponent(Password)

    #236005

    Gregory Vorbe
    Moderator

    Bonjour,

    Je n’avais pas testé la 2e méthode qui consiste à modifier la valeur du paramètre sur le onTransactionStarted(), cela fonctionne sur les autres connecteurs mais apparemment pas sur le connecteur HTTP.
    Cependant, la première méthode avait fonctionné pour moi, mais ce n’est pas la bonne méthode car le SDK Convertigo fait déjà le travail d’encoder les variables d’appel.
    Nous avons repéré un bug dans les transactions et les variables en mode POST qui sera corrigé dans la prochaine version.
    En attendant, il est possible de rajouter un step SequenceJS juste avant le step Call_Transaction et de mettre dedans le code d’encoding de la valeur de la variable :

    Password = encodeURIComponent(Password)

    Cela fonctionne si le nom de variable est identique entre la séquence et la transaction appelée, sinon il faut mapper la variable de la transaction du call sur un step jElement dont la propriété expression peut valoir directement : encodeURIComponent(Password)

    QA&Support

    #236022

    Bonjour,

    En mappant la variable avec le step jElement ça semble fonctionner.

    Merci !

Viewing 8 posts - 1 through 8 (of 8 total)

You must be logged in to reply to this topic.