Usando un clientId de Android (sin client_secret) recibía la siguiente respuesta de error:
{
"error": "invalid_grant",
"error_description": "Missing code verifier."
}
No puedo encontrar ninguna documentación para el campo 'code_verifier' pero descubrí que si lo configura en valores iguales tanto en la autorización como en las solicitudes de token, eliminará este error. No estoy seguro de cuál debería ser el valor deseado o si debería ser seguro. Tiene una longitud mínima (16? Caracteres) pero encontré que la configuración null
también funciona.
Estoy usando AppAuth para la solicitud de autorización en mi cliente de Android que tiene una setCodeVerifier()
función.
AuthorizationRequest authRequest = new AuthorizationRequest.Builder(
serviceConfiguration,
provider.getClientId(),
ResponseTypeValues.CODE,
provider.getRedirectUri()
)
.setScope(provider.getScope())
.setCodeVerifier(null)
.build();
Aquí hay una solicitud de token de ejemplo en el 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);
}
);
Probé y esto funciona con ambos https://www.googleapis.com/oauth2/v4/token
yhttps://accounts.google.com/o/oauth2/token
.
Si está usando en su GoogleAuthorizationCodeTokenRequest
lugar:
final GoogleAuthorizationCodeTokenRequest req = new GoogleAuthorizationCodeTokenRequest(
TRANSPORT,
JSON_FACTORY,
getClientId(),
getClientSecret(),
code,
redirectUrl
);
req.set("code_verifier", null);
GoogleTokenResponse response = req.execute();