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

Bibliothèques et frameworks PHP Discussion :

PHP oAuth 2.0 - Connexion


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 274
    Points : 114
    Points
    114
    Par défaut PHP oAuth 2.0 - Connexion
    Bonjour à tous,

    Tout d'abord je vous demande de l'indulgence, je viens de faire un double AVC avec pour conséquence que j'ai quelques difficulté à assimiler des choses ou me rappeler de certaine chose.
    Néanmoins je reprend le travail (contre l'avis du médecin) car il faut pratiquer pour pas oublier et surtout je n'aime pas profiter du système et encore plus pour des raison financières.

    Je suis actuellement bloqué sur un projet.

    Je travail pour une entreprise qui effectue des tournées de camions, nous les avons équiper d'un dispositif de GPS et géolocalisation via Masternaut qui met à disposition une API utilisant oAuth 2.0
    Mon problème est que je n'arrive même plus à me connecter (connaissance perdue suite à mon AVC).

    J'ai reçu un PDF avec la documentation que vous pouvez trouvez ICI
    Cette documentation est en anglais, j'ai vue des librairies qui existe sur github, mais il y en à une panoplie, certaine plus compliqué que d'autres.

    C'est pourquoi je viens vers vous.
    Est-ce que quelqu'un pourrait m'expliquer point par point comment me connecter et récupérer un token pour ensuite récupérer par exemple la liste des véhicules et des tâches, ou me diriger vers une page qui l'explique mais surtout comment la mettre en pratique.

    J'en demande peut-être beaucoup et je comprendrais que les gens n'ai pas forcement le temps d'expliquer le mode de fonctionnement, d'autant qu'avant mon AVC je savais très bien le faire.

    Je vous remercie d'avance de votre compréhension et de l'aide que vous pourriez m'apporter.

    Bien à vous
    Spliffer

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 274
    Points : 114
    Points
    114
    Par défaut
    Voici où j'en suis.

    J'utilise le client oAuth2 : https://github.com/adoy/PHP-OAuth2

    Code php : 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
     
    <?php
    include_once('core/oAuth/Client.php');
    include_once('core/oAuth/GrantType/IGrantType.php');
    include_once('core/oAuth/GrantType/AuthorizationCode.php');
     
    const CLIENT_ID     = '<<MONID>>';
    const CLIENT_SECRET = '<<MONPASSW>>';
     
    const REDIRECT_URI           = 'http://172.16.0.11/test.php';  // URL de mon script
    const AUTHORIZATION_ENDPOINT = Problème quelle url indiquer ??
    const TOKEN_ENDPOINT         = Problème quelle url indiquer ??
     
    /** Dans la doc il y'a cette URL : https://auth.masternautconnect.com/masternauth-oauth/oauth/accessToken
       * Mais où mettre cette URL ?
    **/ 
     
    echo '<pre>';
    print_r($_GET);
    print_r($_POST);
    echo '</pre>';
     
    $client = new OAuth2\Client(base64_encode(CLIENT_ID), base64_encode(CLIENT_SECRET));
    if (!isset($_GET['code']))
    {
        $auth_url = $client->getAuthenticationUrl(AUTHORIZATION_ENDPOINT, REDIRECT_URI);
        header('Location: ' . $auth_url);
        die('Redirect');
    }
    else
    {
        $params = array('code' => $_GET['code'], 'redirect_uri' => REDIRECT_URI);
        $response = $client->getAccessToken(TOKEN_ENDPOINT, 'authorization_code', $params);
        var_dump($response);
    }
    ?>

    en indiquant https://auth.masternautconnect.com/m...th/accessToken dans authorization_endpoint ou token endpoint j'ai un message d'erreur 503 : Interdit
    Il parle d'un encodage en base64 pour le client id et le secret id, j'ai essayer avec et sans, le résultat est le même 503 : Interdit

    Je vraiment du mal à comprendre la chose.

    Merci de l'aide que vous pourriez m'apporter
    Spliffer

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 274
    Points : 114
    Points
    114
    Par défaut
    Bonjour à tous,

    Je me dit que le client php n'est peut-être plus au normes ou autres, j'essaye donc de faire un step by step.

    Voici mon code minimaliste actuellement, juste pour vérifier que je récupère bien un jeton

    Code php : 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
     
    <?php
    $client_id = base64_encode('MONIDCLIENT');
    $client_secret = base64_encode('MONPASSWORD');
    $auth_string   = "{$client_id}:{$client_secret}";
    $request       = "https://auth.masternautconnect.com/masternauth-oauth/oauth/accessToken"; // Essayer en ajoutant ?grant_type=client_credentials sans succès
    $ch            = curl_init($request);
    curl_setopt_array($ch, array(
        CURLOPT_POST           => TRUE,
        CURLOPT_RETURNTRANSFER => TRUE,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_USERPWD        => $auth_string,
        CURLOPT_HTTPHEADER     => array('Content-Type: application/json;charset=UTF-8;',)
        )
    );
    $response = curl_exec($ch);
    curl_close ($ch) ;
     
    //Vérification des erreurs
    if ($response === FALSE) {
        die(curl_error ($ch));
        echo "Une erreur s'est produite " ;
    } 
    else{ echo $response; }
    ?>
    et je reçois en retour
    { "error" : "invalid_client", "error_description" : "Authentication failure" }
    Dans la doc est mentionnée ceci :
    5.1 Demander un jeton OAuth
    Demande POST pour générer un jeton OAuth, en utilisant l'authenfication de base avec la valeur pour le nom d'utilisateur votre ClientId et le mot de passe votre clientSecret
    URL de la ressource : https://auth.masternautconnect.com/m...th/accessToken
    En-tête HTTP : Autorisation Votre clientId et ClientSecret encodés en Base64
    Type de contenu : application/json;charset=UTF-8
    Paramètre JSON d'entrée HTTP BODY : grant_type Doit être client_credentials
    La doc est en anglais donc désolé de la traduction un peu hasardeuse, mais je pense avoir fait ce qu'on me demande.

    En conculsion je n'arrive même pas à récupérer le jetons

    Bien à vous
    Spliffer

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 232
    Points : 15 525
    Points
    15 525
    Par défaut
    si vous regardez à la page 11 du pdf, il est aussi indiqué que les codes d'accès doivent être encodé en base 64 mais j'ai juste l'impression qu'ils décrivent comme fonctionne l'entête http "Authorization".
    donc si vous ne définissez pas l'entête vous même mais que vous passez par l'option "CURLOPT_USERPWD", je pense que vous pouvez les mettre en clair si j'ai bien compris la documentation de curl :
    https://www.php.net/manual/fr/function.curl-setopt.php

    donc je pense que le code devrait commencer comme cela :

    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
    $client_id = "MONIDCLIENT";
    $client_secret = "MONPASSWORD";
     
    $auth_string   = "{$client_id}:{$client_secret}";
     
    $request       = "https://auth.masternautconnect.com/masternauth-oauth/oauth/accessToken";
    $ch            = curl_init($request);
     
    curl_setopt_array($ch, array(
        CURLOPT_POST           => TRUE,
        CURLOPT_RETURNTRANSFER => TRUE,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_USERPWD        => $auth_string,
        CURLOPT_HTTPHEADER     => array('Content-Type: application/json;charset=UTF-8;',)
        )
    );
     
    // ...

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    FAire de l'oauth2 à la main c'est compliqué et source d'erreur.

    Ta démarche de passer par une librairie cliente est la bonne. EN revanche ton choix de librairie n'est pas le bon. Une lib pas mis à jour depuis 5 ans faut oublier.

    Tu peux te diriger vers league/oauth2-client qui est actuellement la référence. Ca s'installe simplement avec composer.
    Tu as des exemples d'utilisation simple ici : https://oauth2-client.thephpleague.com/usage/
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. JavaMail - Connexion impossible avec OAuth sur Gmail
    Par PP(Team) dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 07/08/2014, 11h53
  2. [ESB] connexion Oauth 1.0
    Par progscoubi dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 29/11/2013, 07h48
  3. Tutoriel pour connexion via Oauth
    Par Nandou56 dans le forum GWT et Vaadin
    Réponses: 0
    Dernier message: 14/10/2012, 21h19
  4. Connexion ODBC
    Par Anonymous dans le forum Réseau
    Réponses: 2
    Dernier message: 23/04/2002, 12h10
  5. Je ne peux établir une connexion cliente sous Linux.
    Par Anonymous dans le forum CORBA
    Réponses: 5
    Dernier message: 16/04/2002, 15h57

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