Le client génère un vérificateur code_verifier de 43 à 128 caractères pris dans l’alphabet des caractères non réservés des URL, envoie code_challenge = BASE64URL(SHA256(code_verifier)) avec code_challenge_method=S256 dans la requête d’autorisation, puis prouve qu’il le possède en envoyant le vérificateur au point de terminaison de jeton. La méthode plain envoie le vérificateur lui-même comme challenge et ne devrait pas être utilisée.
Conçu pour les applications mobiles, où d’autres applications pourraient intercepter les URI de redirection, PKCE bloque aussi l’injection de code d’autorisation dans les applications web : la RFC 9700 le recommande donc pour tous les clients, et le projet OAuth 2.1 l’exige. Il ne remplace pas l’authentification des clients confidentiels, et le serveur d’autorisation doit rejeter les requêtes de jeton qui omettent le vérificateur lorsqu’un challenge a été envoyé.