C'è un ulteriore livello di sicurezza. Quando viene effettuata una richiesta all'endpoint Token per scambiare il codice ricevuto dall'endpoint Autorizza, consente all'applicazione client di autenticarsi sul server delle autorizzazioni. Quando si effettua una richiesta all'endpoint Token, si inviano più dati sul client. Per i clienti riservati (applicazioni che sono in grado di memorizzare in modo sicuro un client segreto) l'endpoint del token richiede al client di autenticarsi tramite un ID client e un segreto client. Vedere questa sezione della 2.0 spec e questa sezione del OpenID Connect spec . Per riassumere, l'applicazione client può inviare l'ID client e il segreto del client in due modi. Un modo è utilizzare la coppia come combinazione nome utente / password tramite l'autenticazione HTTP Basic e l'altra inviando le credenziali nel corpo POST della richiesta dell'endpoint Token. Devo aggiungere che sono richiesti solo i tipi di client confidenziali per inviare la coppia di client id / client secret. I tipi di client pubblici in genere non chiamano l'endpoint token *** Ad esempio, il flusso implicito utilizza solo l'endpoint Authorize. Uno dei motivi per cui il flusso implicito è considerato meno sicuro è perché l'applicazione client non si autentica mai con il server di autorizzazione. Il flusso implicito invia solo un ID client ed è verso l'endpoint Authorize che non supporta un client secret o in alcun modo che il client possa autenticarsi. Si noti che l'invio dell'ID client non sta effettuando l'autenticazione del client. Lo sta solo identificando.
La linea di fondo: quando usi il flusso del codice di autorizzazione stai autenticando il tuo cliente e quindi aggiungi un altro livello di sicurezza.
*** È possibile eseguire uno scenario in cui un client pubblico utilizza l'endpoint token. Se si dispone di un'applicazione JavaScript che utilizza il flusso di proprietario delle risorse e sta inviando le credenziali direttamente al punto finale Token che non avrebbe inviare un segreto client perché un segreto client non può essere memorizzati in modo sicuro in un'applicazione JavaScript.