Aller au contenu principal

4. Protocole

4.1 Le client crée un vérificateur de code​

Le client crée d'abord un vérificateur de code "code_verifier" pour chaque demande d'autorisation OAuth 2.0 [RFC6749].

4.2 Le client crée le défi de code​

Le client crée ensuite un défi de code (code challenge) dérivé du vérificateur de code en utilisant l'une des transformations suivantes :

plain

code_challenge = code_verifier

S256

code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))

Si le client est capable d'utiliser "S256", il doit utiliser "S256", car "S256" est obligatoire à implémenter (MTI) sur le serveur.

4.3 Le client envoie le défi de code avec la demande d'autorisation​

Le client envoie le défi de code dans la demande d'autorisation OAuth 2.0 avec les paramètres supplémentaires suivants :

code_challenge : REQUIS. Défi de code.

code_challenge_method : OPTIONNEL, par défaut "plain". Méthode de transformation : "S256" ou "plain".

4.4 Le serveur retourne le code​

Lorsque le serveur émet le code d'autorisation, il doit associer les valeurs "code_challenge" et "code_challenge_method" au code d'autorisation.

4.4.1 Réponse d'erreur​

Si le serveur require PKCE et que le client n'envoie pas "code_challenge", le point de terminaison d'autorisation doit retourner une réponse d'erreur avec "error" défini sur "invalid_request".

4.5 Le client envoie le code d'autorisation et le vérificateur de code​

À la réception du code d'autorisation, le client envoie la demande de jeton d'accès au point de terminaison de jeton avec le paramètre supplémentaire :

code_verifier : REQUIS. Vérificateur de code.

4.6 Le serveur vérifie code_verifier avant de retourner les jetons​

Le serveur vérifie le code_verifier en calculant le défi de code et en le comparant au "code_challenge" précédemment associé.