En utilisant un clientId Android (pas de client_secret), j'obtenais la réponse d'erreur suivante:
{
"error": "invalid_grant",
"error_description": "Missing code verifier."
}
Je ne trouve aucune documentation pour le champ 'code_verifier', mais j'ai découvert que si vous le définissez sur des valeurs égales dans les demandes d'autorisation et de jeton, cela supprimera cette erreur. Je ne sais pas quelle devrait être la valeur prévue ou si elle devrait être sécurisée. Il a une longueur minimale (16? Caractères) mais j'ai trouvé que le réglage null
fonctionne également.
J'utilise AppAuth pour la demande d'autorisation dans mon client Android qui a une setCodeVerifier()
fonction.
AuthorizationRequest authRequest = new AuthorizationRequest.Builder(
serviceConfiguration,
provider.getClientId(),
ResponseTypeValues.CODE,
provider.getRedirectUri()
)
.setScope(provider.getScope())
.setCodeVerifier(null)
.build();
Voici un exemple de demande de jeton dans le nœud:
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);
}
);
J'ai testé et cela fonctionne avec https://www.googleapis.com/oauth2/v4/token
et https://accounts.google.com/o/oauth2/token
.
Si vous utilisez à la GoogleAuthorizationCodeTokenRequest
place:
final GoogleAuthorizationCodeTokenRequest req = new GoogleAuthorizationCodeTokenRequest(
TRANSPORT,
JSON_FACTORY,
getClientId(),
getClientSecret(),
code,
redirectUrl
);
req.set("code_verifier", null);
GoogleTokenResponse response = req.execute();