Sto cercando di capire come PKCE funziona in un'app mobile e c'è qualcosa che non abbastanza comprensibile.
Quindi, da ciò che posso raccogliere l'app client crea una stringa crittograficamente protetta casualmente nota come verificatore del codice. Questo è quindi memorizzato. Da questo, l'app genera quindi una sfida di codice. La verifica del codice viene quindi inviata in una richiesta API a un server insieme a come è stata generata la richiesta, ad es. S256 o semplice. Il server memorizza questa richiesta insieme a un codice_autorizzazione appropriato per la richiesta in questione.
Quando il client tenta di scambiare il codice per un token di accesso, invia anche il verificatore di codice originale nella richiesta. Il server recupera quindi la sfida memorizzata e il metodo utilizzato originariamente per generarlo per questo particolare codice e genera l'hash equivalente s256 / plain e li confronta. Se corrispondono, restituisce un token di accesso.
Quello che non capisco è come questo dovrebbe sostituire un segreto in un'app client? Sicuramente, se volessi fare una parodia di questo, prenderai il client_id normalmente e genererai il tuo verificatore di codice e la tua sfida e sarai nella stessa posizione come se PKCE non fosse richiesto in primo luogo. Che cosa sta effettivamente cercando di risolvere qui PKCE se l'idea originale fosse che si tratta fondamentalmente di un "segreto dinamico"? La mia ipotesi è che ci sia solo se qualcuno capita di "ascoltare" quando viene restituito auth_code
, ma se stai usando di nuovo SSL è necessario? Viene addebitato come sostituto del fatto che non si dovrebbe archiviare un segreto in un'app pubblica, ma il fatto che il cliente sia responsabile della generazione piuttosto che di un server sembra che non ci stia effettivamente aiutando.