Gérérer un code verifier et un code challenge
Pour toute application ayant un flux de sécurité « Code d'autorisation avec PKCE » vous devrez échanger un code verifier et un code challenge pour obtenir un jeton.
Le code verifier est représenté par une chaîne de 43 à 128 caractères utilisant les caractères A-Z, a-z, 0-9 et les caractères spéciaux : tiret (-), point (.), soulignement (_) et tilde (~).
Tout d'abord, il faut générer une chaîne de caractères alphanumériques pour le code verifier.
Dans l'exemple PowerShell, un code verifier d'une longueur de 50 caractères est généré.
La fonction Get-Random est exécutée sur les valeurs hexadécimales des caractères permis.
$code_verifier = (-join ((0x30..0x39) + ( 0x41..0x5A) + ( 0x61..0x7A) + (0x7e) + (0x5f) + (0x2e) + (0x2d) | Get-Random -Count 50 | % {[char]$_}))
Une fois l'obtention du code verifier, il faut obtenir le code challenge en utilisant la méthode de hachage SHA-256.
$MethodeHachage = [System.Security.Cryptography.HashAlgorithm]::Create("sha256")
$HachageCodeVerifier = $MethodeHachage.ComputeHash([System.Text.Encoding]::UTF8.GetBytes($code_verifier))
Il reste à convertir le code challenge en base 64 et remplacer les caractères égal (=), plus (+) et barre oblique (/) qui ne sont pas des caractères acceptés dans le code challenge.
$code_challenge = [System.Convert]::ToBase64String($HachageCodeVerifier)
$code_challenge = $code_challenge.Split('=')[0]
$code_challenge = $code_challenge.Replace('+', '–')
$code_challenge = $code_challenge.Replace('/', '_')
Affichage du code verifier et du code challenge générés.
Write-Output ("Le code verifier est: $code_verifier")
Write-Output ("Le code challenge est: $code_challenge" )