Come appare il messaggio
{"error":"invalid_client","error_description":"Client authentication failed"}
HTTP/1.1 401 UnauthorizedCause frequenti
- Il client secret è sbagliato, è stato ruotato, è scaduto o è stato copiato con uno spazio o un a capo.
- Il client usa un metodo di autenticazione diverso da quello che l'IdP si aspetta, ad esempio
client_secret_postinvece diclient_secret_basic. - Il client ID è scritto male, appartiene a un altro realm o tenant, oppure il client è stato eliminato o disattivato.
- Il client è impostato come pubblico senza secret ma l'app ne invia uno, oppure è confidenziale e non ne invia.
- Un proxy o un compilatore di moduli altera l'header
Authorization.
Verifica
- Quali metodi di autenticazione accetta l'IdP?
curl -s https://idp.example.com/.well-known/openid-configuration | jq '.token_endpoint, .token_endpoint_auth_methods_supported' - Quale client ID è configurato in Nextcloud?
- Trova l'errore nel log dell'app
grep -i invalid_client /var/www/nextcloud/data/nextcloud.log | tail -n 5 - Caratteri nascosti nel secret salvato?
printf '%s' "$CLIENT_SECRET" | od -c | tail -n 3
Soluzione
- Apri il client nell'IdP, rigenera o copia di nuovo il secret e incollalo nell'app senza spazi né a capo.
- Controlla la scadenza del secret. Alcuni provider, ad esempio Microsoft Entra ID, fanno scadere i secret, quindi creane uno nuovo e aggiorna l'app prima che il vecchio smetta di funzionare.
- Allinea il metodo di autenticazione: imposta client nell'IdP e app sullo stesso,
client_secret_basicoclient_secret_post. - Verifica che il client sia attivo, di tipo confidenziale se usa un secret, e appartenga al realm o tenant dell'URL issuer che usi.
- Riprova il login e leggi nel log dell'IdP il motivo esatto.
Domande frequenti
Che differenza c'è con invalid_grant?
invalid_client significa che l'app non ha potuto provare la propria identità. invalid_grant significa che il codice o il token era sbagliato: usato due volte, scaduto o emesso per un altro indirizzo di redirect.
La causa è una password utente sbagliata?
No. A questo punto l'utente è già autenticato. Il guasto è tra la tua app e l'IdP, quindi cambiare la password dell'utente non serve.