Connectons-nous au serveur Cloud de Mercedes (2/2) – Utiliser les API avec CuRL

Pour appeler le serveur Mercedes il faut envoyer des commandes REST en https .

J’ai trouvé une explication de l’utilisation de ces commandes sur le site de SCIP : CAR HACKING ANALYSIS OF THE MERCEDES CONNECTED VEHICLE API: www.scip.ch/en/?labs.20180405 .

Nota : Https est un Protocole de transmission permettant à l’utilisateur d’accéder à des pages web par l’intermédiaire d’un navigateur. Rest est une logique d’appel d’API de serveurs.

1.         CURL

CURL est une interface en ligne de commande, destinée à récupérer le contenu d’une ressource accessible par un réseau informatique. La ressource est désignée à l’aide d’une URL et doit être d’un type supporté par le logiciel.

Normalement on ne peut pas utiliser CURL sur Windows mais des personnes ont reprogrammé CURL pour qu’on puisse utiliser CURL sur Windows(https://o7planning.org/fr/11617/installation-de-curl-sous-windows). Donc j’ai téléchargé la version Windows de CURL sur mon PC et j’ai fait un test avec mon Blog et ceci a marché (j’ai bien obtenu le contenu de la page de mon blog dans le fichier mapage.html).

curl » http://wollef.org/fr/mieux-que-pokemon-go-pixelmon-mod/ –output mapage.html

2.         Connexion sécurisée et Redirect URL

a)              Le principe

Avant d’accéder aux données avec l’API il faut montrer qu’on est le propriétaire du compte Mercedes. Ce n’est malheureusement pas aussi simple que de taper un nom d’utilisateur et un mot de passe.

En effet le propriétaire du compte (la personne) doit approuver l’utilisation des données du compte par l’application que l’on a déclarée juste avant.

Le mécanisme est décrit dans l’article de SCIP dont je parle juste avant, et aussi dans la documentation Mercedes  ( https://developer.mercedes-benz.com/content-page/oauth-documentation ).

Pour simplifier cela donne les étapes suivantes :

  • Etape A : L’application qui veut utiliser les données doit envoyer l’utilisateur vers une page Mercedes pour y taper son utilisateur et mot de passe
  • Etape B : L’utilisateur va pouvoir saisir ces informations et dire qu’il approuve l’utilisation des données par l’application
  • Etape C : Le serveur Mercedes renvoie alors l’utilisateur vers l’application en donnant une clé d’accès à celle—ci.

Cette dernière action (le retour vers l’application) se fait avec la ‘redirect url’.

b)              Configuration de la redirect URL

On doit indiquer dans la page de configuration la redirect URL. Pour les premiers tests en CURL, ce sera une url ‘localhost’ (car on n’a pas encore notre serveur avec le jeu en place).

Note : Sur l’impression d’écran, il y a un autre redirect URL, c’est celle de l’application finie (celle intégrée avec salesforce). Nous n’en avons pas besoin pour le moment.

3.         Mise en place de la connexion

La première étape est de connaître les informations qui permettent à l’application d’accéder au serveur Mercedes avec les API.

Ce sont les client id et client secret qui ont été créés quand on a déclaré l’application (ils sont sur dans le texte de ce blog tronqués pour des raison de sécurité, les id réels obtenus et à saisir sont plus longs).

Ensuite, on simule l‘étape A à la main, en tapant l’URL d’authentification dans le navigateur avec le seul client-id:

https://api.secure.mercedes-benz.com/oidc10/auth/oauth/v2/authorize?response_type=code&client_id=36f504aa-f141-41ad-……&redirect_uri=https%3A%2F%2Flocalhost&scope=mb:user:pool:reader%20mb:vehicle:status:general

On arrive sur une page pour se connecter, c’est l’étape B faite par l’utilisateur.

Le serveur Mercedes demande d’approuver la connexion aux données

Ensuite le serveur Mercedes redirige vers une page web (return URL), en donnant un code d‘autorisation unique : 6e9d89c4-a374-4bb9-8c88-673034f87342. C’est l’étape C.

4.         Obtenir le jeton de session

Maintenant on va demander avec l’API (donc en utilisant CURL) d’obtenir le jeton de session qui sera utilisé pour tous les appels suivant à l’API.

Il y a une astuce : c’est que l’appel demande les client Id et client secret dans une forme spéciale qui est l’encodage base 64.

Pour l’obtenir j’ai utilisé une application disponible sur le web : Base 64 Encode https://www.base64encode.net/

Pour encoder, on passe à cette application une chaine de caractère composée du client id et du secret id sépararés par un : (double point).

On obtient la forme encodée des informations suivantes (nota : la partie du milieu est tronquée pour des raisons de sécurité) :

MzZmNTA0YWEtZjE0MS00MWFkLTkz …… QxNjUtNDUwOS04MTdhLTE2YTRkZjViMTM3ZA==

On peut maintenant faire l’appel vers l’API pour initialiser la session en y intégrant le token (incluant donc c lient id et secret id) et le code d’autorisation unique de l’étape B :

curl -X POST « https://api.secure.mercedes-benz.com/oidc10/auth/oauth/v2/token » -H « authorization: Basic MzZmNTA0YWEtZjE0MS00MWFkLTkz……QxNjUtNDUwOS04MTdhLTE2YTRkZjViMTM3ZA== » -H « content-type: application/x-www-form-urlencoded » -d « grant_type=authorization_code&code=6dee706b-9ce9-4f3a-85e8-bd696aae8bef&redirect_uri=https%3A%2F%2Flocalhost »

Hourra ! Le serveur Mercedes nous a renvoyé les jetons de connexion (access token)

5.         Utilisation de la session : appel d’une API : la liste des voitures

Une fois qu’on a un jeton de session on peut s’en servir pour appeler les APIs avec Curl.

On va appeler ici trois API tel que documentées ici : https://developer.mercedes-benz.com/apis/connected_vehicle_experimental_api/ .

a)              Obtenir la liste des voitures

curl -X GET « https://api.mercedes-benz.com/experimental/connectedvehicle/v1/vehicles »  -H « accept: application/json »  -H « authorization: Bearer f9da01aa-0c07-412b-bb0c-f31a7b413b7b »

On peut lire l’Id de la voiture dans la réponse : E09C4378AD45F1A304

Documentation : https://developer.mercedes-benz.com/apis/connected_vehicle_experimental_api/docs#_get_the_vehicleid_from_the_connected_vehicle_api

b)              Obtenir les informations sur la voiture

curl -X GET « https://api.mercedes-benz.com/experimental/connectedvehicle/v1/vehicles/E09C4378AD45F1A304 » -H « accept: application/json » -H « authorization: Bearer f9da01aa-0c07-412b-bb0c-f31a7b413b7b »

Documentation : https://developer.mercedes-benz.com/apis/connected_vehicle_experimental_api/docs#_2_get_additional_information_about_your_car

c)              Verrouiller les portes

curl -X POST « https://api.mercedes-benz.com/experimental/connectedvehicle/v1/vehicles/E09C4378AD45F1A304/doors » -H « Content-Type: application/json » -H « authorization: Bearer f9da01aa-0c07-412b-bb0c-f31a7b413b7b »  -d « { \ »command\ »: \ »LOCK\ »} »

Documentation: https://developer.mercedes-benz.com/apis/connected_vehicle_experimental_api/docs#_4_set_the_lock_state_of_your_car_doors

 

 

Nous voici donc en mesure maintenant d’appeler les API du serveur Cloud de Mercedes pour notre application de jeu ! C’est ce que nous ferons dans les articles prochains !