Passer au contenu principal

Comment se connecter aux points de terminaison à l’aide du flux de code d’autorisation OAuth 2.0 avec PKCE

Comment se connecter aux endpoints

Pour authentifier vos utilisateurs, votre App doit implémenter un flux d’autorisation. Ce flux d’autorisation vous permet de rediriger vos utilisateurs vers une boîte de dialogue d’autorisation sur X. À partir de là, l’interface principale de X affichera cette boîte de dialogue et gérera l’autorisation pour le compte de votre App. Vos utilisateurs pourront autoriser votre App ou refuser l’autorisation. Une fois leur choix effectué, X les redirigera vers votre App, où vous pourrez échanger le code d’autorisation contre un jeton d’accès (si l’utilisateur a autorisé votre App) ou gérer un refus (si l’utilisateur ne l’a pas autorisée).

Utilisation de clients confidentiels

Si vous travaillez avec des clients confidentiels, vous devrez utiliser un schéma d’authentification Basic pour générer un en-tête d’autorisation avec encodage base64 lors de l’envoi de requêtes aux endpoints de jeton. Les champs userid et password sont séparés par un seul caractère deux-points (”:”) dans une chaîne encodée en base64 au sein des identifiants. Un exemple ressemblerait à ceci : -header 'Authorization: Basic V1ROclFTMTRiVWhwTWw4M2FVNWFkVGQyTldNNk1UcGphUTotUm9LeDN4NThKQThTbTlKSXQyZm1BanEzcTVHWC1icVozdmpKeFNlR3NkbUd0WEViUA==' Si le user agent souhaite envoyer le Client ID « Aladdin » et le mot de passe « open sesame », il utiliserait l’en-tête suivant : Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== Pour créer l’en-tête d’autorisation de type Basic, vous devrez appliquer un encodage base64 à votre Client ID et votre Client Secret, qui peuvent être obtenus à partir de la page « Keys and Tokens » de votre App dans la Console de développement.

Étapes pour se connecter avec OAuth 2.0

Étape 1 : Construire une URL d’autorisation Votre App doit construire une URL d’autorisation vers X, en indiquant les autorisations (scopes) dont votre App a besoin. Par exemple, si votre App doit rechercher des Tweets, des utilisateurs et gérer les abonnements (follows), elle doit demander les scopes suivants : tweet.read%20users.read%20follows.read%20follows.write L’URL contient également les paramètres code_challenge et state, en plus des autres paramètres requis. En production, vous devez utiliser une chaîne aléatoire pour le code_challenge. Étape 2 : GET oauth2/authorize Demandez à l’utilisateur de s’authentifier, ce qui enverra à l’application un code d’autorisation. Si vous avez activé OAuth 2.0 pour votre App, vous pouvez trouver votre Client ID dans la page « Keys and Tokens » de votre App. Un exemple d’URL vers laquelle rediriger l’utilisateur ressemblerait à ceci :
https://x.com/i/oauth2/authorize?response_type=code&client_id=M1M5R3BMVy13QmpScXkzTUt5OE46MTpjaQ&redirect_uri=https://www.example.com&scope=tweet.read%20users.read%20follows.read%20follows.write&state=state&code_challenge=challenge&code_challenge_method=plain
Voici à quoi ressemblerait une URL d’exemple avec offline_access :
https://x.com/i/oauth2/authorize?response_type=code&client_id=M1M5R3BMVy13QmpScXkzTUt5OE46MTpjaQ&redirect_uri=https://www.example.com&scope=tweet.read%20users.read%20follows.read%20offline.access&state=state&code_challenge=challenge&code_challenge_method=plain
Une fois l’authentification réussie, au niveau du redirect_uri vous recevrez une requête contenant le paramètre auth_code. Votre application doit vérifier le paramètre state. Un exemple de requête provenant de la redirection du client serait :
https://www.example.com/?state=state&code=VGNibzFWSWREZm01bjN1N3dicWlNUG1oa2xRRVNNdmVHelJGY2hPWGxNd2dxOjE2MjIxNjA4MjU4MjU6MToxOmFjOjE
Étape 3 : POST oauth2/token - Jeton d’accès À ce stade, vous pouvez utiliser le code d’autorisation pour créer un jeton d’accès et un jeton d’actualisation (uniquement si le scope offline.access est demandé). Vous pouvez effectuer une requête POST vers le point de terminaison suivant :
https://api.x.com/2/oauth2/token
Vous devrez envoyer le Content-Type de application/x-www-form-urlencoded dans un en-tête. De plus, votre requête doit inclure : code, grant_type, client_id et redirect_uri, ainsi que le code_verifier. Voici un exemple de requête de jeton pour un client public :
curl --location --request POST 'https://api.x.com/2/oauth2/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'code=VGNibzFWSWREZm01bjN1N3dicWlNUG1oa2xRRVNNdmVHelJGY2hPWGxNd2dxOjE2MjIxNjA4MjU4MjU6MToxOmFjOjE' \
--data-urlencode 'grant_type=authorization_code' \
--data-urlencode 'client_id=rG9n6402A3dbUJKzXTNX4oWHJ' \
--data-urlencode 'redirect_uri=https://www.example.com' \
--data-urlencode 'code_verifier=challenge'
Voici un exemple avec un client confidentiel :
curl --location --request POST 'https://api.x.com/2/oauth2/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: Basic V1ROclFTMTRiVWhwTWw4M2FVNWFkVGQyTldNNk1UcGphUTotUm9LeDN4NThKQThTbTlKSXQyZm1BanEzcTVHWC1icVozdmpKeFNlR3NkbUd0WEViUA=='\
--data-urlencode 'code=VGNibzFWSWREZm01bjN1N3dicWlNUG1oa2xRRVNNdmVHelJGY2hPWGxNd2dxOjE2MjIxNjA4MjU4MjU6MToxOmFjOjE' \
--data-urlencode 'grant_type=authorization_code' \
--data-urlencode 'redirect_uri=https://www.example.com' \
--data-urlencode 'code_verifier=challenge'
Étape 4 : Se connecter aux API Vous êtes maintenant prêt à vous connecter aux endpoints en utilisant OAuth 2.0. Pour ce faire, vous effectuerez la requête API comme vous le feriez avec l’authentification par Jeton Bearer. Au lieu d’envoyer votre Jeton Bearer, vous devrez utiliser le jeton d’accès que vous avez généré à l’étape précédente. En réponse, vous devriez voir le payload approprié correspondant à l’endpoint que vous ciblez. Cette requête est la même pour les clients publics et confidentiels.  Voici à quoi pourrait ressembler un exemple de requête :
curl --location --request GET 'https://api.x.com/2/tweets?ids=1261326399320715264,1278347468690915330' \
--header 'Authorization: Bearer Q0Mzb0VhZ0V5dmNXSTEyNER2MFNfVW50RzdXdTN6STFxQlVkTGhTc1lCdlBiOjE2MjIxNDc3NDM5MTQ6MToxOmF0OjE'
Étape 5 : POST oauth2/token - refresh token Un refresh token permet à une application d’obtenir un nouvel access token sans solliciter l’utilisateur. Vous pouvez créer un refresh token en effectuant une requête POST vers l’endpoint suivant : https://api.x.com/2/oauth2/token. Vous devrez ajouter le Content-Type application/x-www-form-urlencoded dans un en-tête. En outre, vous devrez aussi transmettre votre refresh_token, définir votre grant_type sur refresh_token, et définir votre client_id. Cette requête fonctionnera pour les clients publics :
POST 'https://api.x.com/2/oauth2/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'refresh_token=bWRWa3gzdnk3WHRGU1o0bmRRcTJ5VUxWX1lZTDdJSUtmaWcxbTVxdEFXcW5tOjE2MjIxNDc3NDM5MTQ6MToxOnJ0OjE' \
--data-urlencode 'grant_type=refresh_token' \
--data-urlencode 'client_id=rG9n6402A3dbUJKzXTNX4oWHJ'
Voici un exemple pour un client confidentiel :
POST 'https://api.x.com/2/oauth2/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: Basic V1ROclFTMTRiVWhwTWw4M2FVNWFkVGQyTldNNk1UcGphUTotUm9LeDN4NThKQThTbTlKSXQyZm1BanEzcTVHWC1icVozdmpKeFNlR3NkbUd0WEViUA=='\
--data-urlencode 'refresh_token=bWRWa3gzdnk3WHRGU1o0bmRRcTJ5VUxWX1lZTDdJSUtmaWcxbTVxdEFXcW5tOjE2MjIxNDc3NDM5MTQ6MToxOnJ0OjE'\
--data-urlencode 'grant_type=refresh_token'
Étape 6 : POST oauth2/revoke - Révoquer le jeton Un jeton de révocation invalide un jeton d’accès ou un jeton d’actualisation. Il permet de proposer une fonctionnalité de « déconnexion » dans les clients, afin de supprimer toutes les informations d’identification de sécurité associées au flux d’autorisation qui pourraient ne plus être nécessaires. Le jeton de révocation est destiné à une App qui révoque un jeton, et non à un utilisateur. Vous pouvez créer une requête de révocation de jeton en envoyant une requête POST à l’URL suivante si l’App souhaite révoquer par programmation l’accès qui lui a été accordé :
https://api.x.com/2/oauth2/revoke
Vous devrez transmettre le Content-Type de application/x-www-form-urlencoded via un en-tête, ainsi que votre jeton et votre client_id. Dans certains cas, un utilisateur peut souhaiter révoquer l’accès qu’il a accordé à une App ; il peut révoquer cet accès en se rendant sur la page des Apps connectées.
curl --location --request POST 'https://api.x.com/2/oauth2/revoke' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'token=Q0Mzb0VhZ0V5dmNXSTEyNER2MFNfVW50RzdXdTN6STFxQlVkTGhTc1lCdlBiOjE2MjIxNDc3NDM5MTQ6MToxOmF0OjE' \
--data-urlencode 'client_id=rG9n6402A3dbUJKzXTNX4oWHJ'
Cette requête fonctionnera pour les clients confidentiels :
curl --location --request POST 'https://api.x.com/2/oauth2/revoke' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: Basic V1ROclFTMTRiVWhwTWw4M2FVNWFkVGQyTldNNk1UcGphUTotUm9LeDN4NThKQThTbTlKSXQyZm1BanEzcTVHWC1icVozdmpKeFNlR3NkbUd0WEViUA=='\
--data-urlencode 'token=Q0Mzb0VhZ0V5dmNXSTEyNER2MFNfVW50RzdXdTN6STFxQlVkTGhTc1lCdlBiOjE2MjIxNDc3NDM5MTQ6MToxOmF0OjE'