Utilizzando un client ID Android (no client_secret) stavo ottenendo la seguente risposta di errore:
{
"error": "invalid_grant",
"error_description": "Missing code verifier."
}
Non riesco a trovare alcuna documentazione per il campo "code_verifier" ma ho scoperto che se lo imposti su valori uguali sia nelle richieste di autorizzazione che in quelle di token, questo errore verrà rimosso. Non sono sicuro di quale dovrebbe essere il valore previsto o se dovrebbe essere sicuro. Ha una lunghezza minima (16 caratteri?) Ma ho trovato che null
anche l' impostazione funziona.
Sto usando AppAuth per la richiesta di autorizzazione nel mio client Android che ha una setCodeVerifier()
funzione.
AuthorizationRequest authRequest = new AuthorizationRequest.Builder(
serviceConfiguration,
provider.getClientId(),
ResponseTypeValues.CODE,
provider.getRedirectUri()
)
.setScope(provider.getScope())
.setCodeVerifier(null)
.build();
Ecco un esempio di richiesta di token nel nodo:
request.post(
'https://www.googleapis.com/oauth2/v4/token',
{ form: {
'code': '4/xxxxxxxxxxxxxxxxxxxx',
'code_verifier': null,
'client_id': 'xxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com',
'client_secret': null,
'redirect_uri': 'com.domain.app:/oauth2redirect',
'grant_type': 'authorization_code'
} },
function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log('Success!');
} else {
console.log(response.statusCode + ' ' + error);
}
console.log(body);
}
);
Ho provato e funziona con entrambi https://www.googleapis.com/oauth2/v4/token
e https://accounts.google.com/o/oauth2/token
.
Se invece stai usando GoogleAuthorizationCodeTokenRequest
:
final GoogleAuthorizationCodeTokenRequest req = new GoogleAuthorizationCodeTokenRequest(
TRANSPORT,
JSON_FACTORY,
getClientId(),
getClientSecret(),
code,
redirectUrl
);
req.set("code_verifier", null);
GoogleTokenResponse response = req.execute();