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

REST Discussion :

REST API : échec de l'authentification


Sujet :

REST

  1. #1
    Membre actif Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Points : 258
    Points
    258
    Par défaut REST API : échec de l'authentification
    Bonjour à tous,

    Je suis nouveau dans le RESTFul, je dois me connecter à un CRM utilisant une API REST...
    J'ai l'impression que je n'ai pas assimilé le concept, je m'explique :

    d'après ce que j'ai compris :

    1. on soumet une autorisation (/oauth2/authorize)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $AuthorizeDatas = array (
    	"response_type" => "code",
    	"client_id" => $clientId,
    	"redirect_uri" => $RedirectUri
    );
    2 on reçoit le code d'autorisation et on va chercher le token avec le code (/oauth2/token)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $TokenDatas = array (
    	"grant_type" => "authorization_code",
    	"client_id" => $clientId,
    	"client_secret" => $clientSecret,
    	"redirect_uri" => $RedirectUri,
    	"code" => "Le code reçu par authorize"
    );
    ça bloque dès l'autorisation avec l'erreur suivante : error=unsupported_response_type

    Mais ce que je ne comprends pas, c'est que "Authorize" n'est même pas censé me renvoyer le code, mais me rediriger vers l'uri de redirection, avec le code en paramètres.
    D'après ce que je vois, cet appel est fait pour une utilisation client par un navigateur (url de redirection,..)

    Moi, je veux automatiser la connexion par cron, avec un script php qui se connecte et puisse travailler.
    Je ne suis pas sur d'être sur la bonne voie.

    J'ai bien sur lu toute (ou partie) de la doc, j'ai été voir sur différents sites, mais il y a toujours cette redirection avec le code que j'ai du mal à comprendre.
    Sans parler de l'erreur "unsupported..." que je reçois en retour.

    Je ne dois pas être sur la bonne voie... Qui peut m'éclairer ?

    Merci à l'avance.
    C'est curieux chez les marins ce besoin de faire des phrases !

  2. #2
    Membre régulier
    Homme Profil pro
    Salesforce Developer
    Inscrit en
    Mai 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Activité : Salesforce Developer

    Informations forums :
    Inscription : Mai 2013
    Messages : 14
    Points : 99
    Points
    99
    Par défaut
    Si tu es en php, je te conseille ce tuto (here) qui est vachement bien fait. C'est comme ca que j'ai commencer.
    Ton probleme c'est que tu ne specifies pas sur quelle server il doit se connecter (test.salesforce.com ou login.salesforce.com).

    1) index.php
    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
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>REST/OAuth Example</title>
    </head>
    <body>
    <script type="text/javascript" language="javascript">
        if (location.protocol != "https:") {
            document.write("OAuth will not work correctly from plain http. "+
                            "Please use an https URL.");
        } else {
            document.write("<a href=\"oauth.php\">Click here to retrieve accounts from Salesforce via REST/OAuth.</a>");
        }
    </script>
    </body>
    </html>
    2) config.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    define("CLIENT_ID", "PUT_YOUR_CONSUMER_KEY_HERE");
    define("CLIENT_SECRET", "PUT_YOUR_CONSUMER_SECRET_HERE");
    define("REDIRECT_URI", "https://localhost/resttest/oauth_callback.php");
    define("LOGIN_URI", "https://login.salesforce.com");
    ?>
    3) oauth.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    require_once 'config.php';
    
    $auth_url = LOGIN_URI
            . "/services/oauth2/authorize?response_type=code&client_id="
            . CLIENT_ID . "&redirect_uri=" . urlencode(REDIRECT_URI);
    
    header('Location: ' . $auth_url);
    ?>
    4) oauth_callback.php
    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
    <?php
    require_once 'config.php';
    
    session_start();
    
    $token_url = LOGIN_URI . "/services/oauth2/token";
    
    $code = $_GET['code'];
    
    if (!isset($code) || $code == "") {
        die("Error - code parameter missing from request!");
    }
    
    $params = "code=" . $code
        . "&grant_type=authorization_code"
        . "&client_id=" . CLIENT_ID
        . "&client_secret=" . CLIENT_SECRET
        . "&redirect_uri=" . urlencode(REDIRECT_URI);
    
    $curl = curl_init($token_url);
    curl_setopt($curl, CURLOPT_HEADER, false);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
    
    $json_response = curl_exec($curl);
    
    $status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
    
    if ( $status != 200 ) {
        die("Error: call to token URL $token_url failed with status $status, response $json_response, curl_error " . curl_error($curl) . ", curl_errno " . curl_errno($curl));
    }
    
    curl_close($curl);
    
    $response = json_decode($json_response, true);
    
    $access_token = $response['access_token'];
    $instance_url = $response['instance_url'];
    
    if (!isset($access_token) || $access_token == "") {
        die("Error - access token missing from response!");
    }
    
    if (!isset($instance_url) || $instance_url == "") {
        die("Error - instance URL missing from response!");
    }
    
    $_SESSION['access_token'] = $access_token;
    $_SESSION['instance_url'] = $instance_url;
    
    header( 'Location: demo_rest.php' ) ;
    ?>
    5) demo_rest.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    session_start();
    ....
    >

  3. #3
    Membre actif Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Points : 258
    Points
    258
    Par défaut
    Merci pour ta réponse brovasi,

    ce que je n'avais pas capté je pense, c'est que le redirect_uri se situe côté client et non pas côté serveur...
    Les 1ers tests sont concluants, je pense pouvoir avancer normalement maintenant.

    Je mets donc la discussion en résolu, en attendant peut-être les prochaines questions.

    Merci encore!
    C'est curieux chez les marins ce besoin de faire des phrases !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/03/2015, 01h40
  2. DropBox Authentification REST API
    Par laurentbeatles dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 05/02/2013, 15h23
  3. Pay-Per-View REST API
    Par okoweb dans le forum Langage
    Réponses: 3
    Dernier message: 23/08/2010, 20h37
  4. [PostgreSQL] Échec de l'authentification php
    Par manudwarf dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/01/2010, 21h07

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