Passer au contenu principal

Autoriser une requête

L’objectif de ce document est de vous montrer comment modifier des requêtes HTTP afin d’envoyer des requêtes autorisées à la X API. Toutes les API de X reposent sur le protocole HTTP. Cela signifie que tout logiciel que vous développez et qui utilise les API de X envoie une série de messages structurés aux serveurs de X. Par exemple, une requête visant à publier le texte « Hello Ladies + Gentlemen, a signed OAuth request! » en tant que Tweet ressemblera à ceci :
POST /1.1/statuses/update.json?include_entities=true HTTP/1.1
Accept: */*
Connection: close
User-Agent: OAuth gem v0.4.4
Content-Type: application/x-www-form-urlencoded
Content-Length: 76
Host: api.x.com

status=Hello%20Ladies%20%2b%20Gentlemen%2c%20a%20signed%20OAuth%20request%21
Toute bibliothèque HTTP devrait pouvoir générer et émettre la requête ci-dessus sans grande difficulté. Cependant, cette requête est considérée comme invalide, puisqu’il n’existe aucun moyen de savoir :
  1. Quelle application effectue la requête
  2. Au nom de quel utilisateur la requête publie
  3. Si l’utilisateur a accordé à l’application l’autorisation de publier en son nom
  4. Si la requête a été altérée par un tiers pendant son transit
Pour permettre aux applications de fournir ces informations, l’API de X s’appuie sur le protocole OAuth 1.0a. À un niveau très simplifié, l’implémentation de X exige que les requêtes nécessitant une autorisation contiennent un en-tête HTTP Authorization supplémentaire, avec suffisamment d’informations pour répondre aux questions listées ci-dessus. Une version de la requête HTTP présentée ci-dessus, modifiée pour inclure cet en-tête, ressemble à ceci (normalement, l’en-tête Authorization devrait tenir sur une seule ligne, mais il a été renvoyé à la ligne ici pour plus de lisibilité) :
POST /1.1/statuses/update.json?include_entities=true HTTP/1.1
Accept: */*
Connection: close
User-Agent: OAuth gem v0.4.4
Content-Type: application/x-www-form-urlencoded
Authorization:
OAuth oauth\_consumer\_key="xvz1evFS4wEEPTGEFPHBog",
oauth_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg",
oauth_signature="tnnArxj06cWHq44gCs1OSKk%2FjLY%3D",
oauth\_signature\_method="HMAC-SHA1",
oauth_timestamp="1318622958",
oauth_token="370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb",
oauth_version="1.0"
Content-Length: 76
Host: api.x.com

status=Bonjour%20Mesdames%20%2b%20Messieurs%2c%20une%20requ%C3%AAte%20OAuth%20sign%C3%A9e%21
Au moment où cette requête a été créée, elle aurait été acceptée comme valide par la X API. Si ce processus de signature vous semble hors du périmètre de votre intégration, envisagez d’utiliser les Web Intents, qui n’ont pas besoin d’OAuth pour interagir avec la X API.   Collecte des paramètres Vous devriez constater que l’en-tête contient 7 paires clé/valeur, dont les clés commencent toutes par la chaîne « oauth_ ». Pour toute requête à la X API, rassembler ces 7 valeurs et créer un en-tête similaire vous permettra de spécifier l’autorisation de la requête. La manière dont chaque valeur a été générée est décrite ci-dessous : Consumer key Le oauth_consumer_key identifie l’application qui effectue la requête. Récupérez cette valeur depuis la page des paramètres de votre X App dans le developer portal.
oauth_consumer_keyxvz1evFS4wEEPTGEFPHBog
Nonce Le paramètre oauth_nonce est un jeton unique que votre application doit générer pour chaque requête. X utilisera cette valeur pour déterminer si une requête a été soumise plusieurs fois. La valeur de cet exemple a été générée en encodant en base64 32 octets de données aléatoires, puis en supprimant tous les caractères non alphabétiques-numériques; toute approche produisant une chaîne alphanumérique suffisamment aléatoire convient ici.
oauth_noncekYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg
Signature Le paramètre oauth_signature contient une valeur générée en soumettant l’ensemble des autres paramètres de requête ainsi que deux valeurs secrètes à un algorithme de signature. La signature permet à X de vérifier que la requête n’a pas été modifiée en transit, d’authentifier l’application qui envoie la requête et de confirmer que l’application est autorisée à interagir avec le compte de l’utilisateur. Le processus de calcul de oauth_signature pour cette requête est décrit dans Creating a signature.
oauth_signaturetnnArxj06cWHq44gCs1OSKk/jLY=
Méthode de signature La valeur oauth_signature_method utilisée par X est HMAC-SHA1. Cette valeur doit être utilisée pour toute requête autorisée envoyée à la X API.
oauth_signature_methodHMAC-SHA1
Horodatage Le paramètre oauth_timestamp indique le moment de création de la requête. Cette valeur doit correspondre au nombre de secondes écoulées depuis l’époque Unix au moment où la requête est générée et peut être facilement produite dans la plupart des langages de programmation. X rejettera les requêtes créées trop longtemps auparavant ; il est donc important de maintenir l’horloge de la machine qui génère les requêtes synchronisée via NTP.
oauth_timestamp1318622958
Jeton Le paramètre oauth_token représente généralement l’autorisation donnée par un utilisateur pour partager l’accès à son compte avec votre application. Il existe quelques requêtes d’authentification où cette valeur n’est pas transmise ou prend la forme d’un autre type de jeton ; ces cas sont décrits en détail dans Obtaining access tokens. Pour la plupart des requêtes à usage général, vous utiliserez ce que l’on appelle un access token. Vous pouvez générer un access token valide pour votre compte depuis la page des paramètres de votre X App sur le developer portal.
oauth_token370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb
Version Le paramètre oauth_version doit toujours être 1.0 pour toute requête envoyée à la X API.
oauth_version1.0

Construction de la chaîne d’en-tête

Pour construire la chaîne d’en-tête, imaginez écrire dans une chaîne nommée DST.
  1. Ajoutez la chaîne « OAuth » (y compris l’espace à la fin) à DST.
  2. Pour chaque paire clé/valeur des 7 paramètres mentionnés ci‑dessus :
    1. Pourcent-encodez la clé et ajoutez‑la à DST.
    2. Ajoutez le caractère égal « = » à DST.
    3. Ajoutez un guillemet double « ” » à DST.
    4. Pourcent-encodez la valeur et ajoutez‑la à DST.
    5. Ajoutez un guillemet double « ” » à DST.
    6. S’il reste des paires clé/valeur, ajoutez une virgule « , » et un espace « » à DST.
Accordez une attention particulière au pourcent-encodage des valeurs lors de la construction de cette chaîne. Par exemple, la valeur oauth_signature de tnnArxj06cWHq44gCs1OSKk/jLY= doit être encodée en tnnArxj06cWHq44gCs1OSKk%2FjLY%3D. L’application de ces étapes aux paramètres recueillis ci‑dessus produit la chaîne suivante :
OAuth oauth_consumer_key="xvz1evFS4wEEPTGEFPHBog", oauth_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg", oauth_signature="tnnArxj06cWHq44gCs1OSKk%2FjLY%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1318622958", oauth_token="370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb", oauth_version="1.0"
Cette valeur doit être définie comme en-tête Authorization de la requête.
I