!!! Overview The [{$pagename}] is specified in the [Proof Key for Code Exchange by OAuth Public Clients] !! [Example] for the S256 [{$pagename}] The [OAuth Client] uses output of a suitable random number generator to create a 32-octet sequence. The octets representing the value in this example (using JSON array notation) are:" %%prettify {{{ [116, 24, 223, 180, 151, 153, 224, 37, 79, 250, 96, 125, 216, 173, 187, 186, 22, 212, 37, 77, 105, 214, 191, 240, 91, 88, 5, 88, 83, 132, 141, 121] }}} /% Encoding this octet sequence as a Base64url provides the value of the code_verifier: %%prettify {{{ dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk }}} /% The [code_verifier] is then [hashed|Hash] via the [SHA256] [hash Function] to produce: %%prettify {{{ [19, 211, 30, 150, 26, 26, 216, 236, 47, 22, 177, 12, 76, 152, 46, 8, 118, 168, 120, 173, 109, 241, 68, 86, 110, 225, 137, 74, 203, 112, 249, 195] }}} Encoding this octet sequence as a base64url provides the value of the [code_challenge]: %%prettify {{{ E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM }}} The [Authorization Request] includes: %%prettify {{{ code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM &code_challange_method=S256 }}} The [Authorization Server] then records the [code_challenge] and [code_challenge_method] along with the [Authorization Code] that is granted to the [OAuth Client]. In the [Access Token Request] to the [token_endpoint] the client includes the code received in the authorization response as well as the additional paramater: %%prettify {{{ code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk }}} The [Authorization Server] retrieves the information for the code grant. Based on the recorded [{$pagename}] being S256, it then hashes and base64url encodes the value of code_verifier. BASE64URL-ENCODE(SHA256(ASCII("[code_verifier]" ))) The calculated value is then compared with the value of [code_challenge]: %%prettify {{{ BASE64URL-ENCODE(SHA256(ASCII("code_verifier" ))) == code_challenge }}} If the two values are equal then the [Authorization Server] can provide the tokens as long as there are no other errors in the request. If the values are not equal then the request must be rejected, and an [error|OAuth Error] returned. !! More Information There might be more information for this subject on one of the following: [{ReferringPagesPlugin before='*' after='\n' }]