Bei Verwendung einer Android-Client-ID (kein client_secret) wurde die folgende Fehlerantwort angezeigt:
{
"error": "invalid_grant",
"error_description": "Missing code verifier."
}
Ich kann keine Dokumentation für das Feld 'code_verifier' finden, aber ich habe festgestellt, dass dieser Fehler behoben wird, wenn Sie es sowohl in der Autorisierungs- als auch in der Token-Anforderung auf gleiche Werte setzen. Ich bin nicht sicher, was der beabsichtigte Wert sein soll oder ob er sicher sein soll. Es hat eine Mindestlänge (16? Zeichen), aber ich fand, dass die Einstellung null
auch funktioniert.
Ich verwende AppAuth für die Autorisierungsanforderung in meinem Android-Client, der eine setCodeVerifier()
Funktion hat.
AuthorizationRequest authRequest = new AuthorizationRequest.Builder(
serviceConfiguration,
provider.getClientId(),
ResponseTypeValues.CODE,
provider.getRedirectUri()
)
.setScope(provider.getScope())
.setCodeVerifier(null)
.build();
Hier ist ein Beispiel für eine Tokenanforderung im Knoten:
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);
}
);
Ich habe getestet und das funktioniert mit beiden https://www.googleapis.com/oauth2/v4/token
und https://accounts.google.com/o/oauth2/token
.
Wenn Sie GoogleAuthorizationCodeTokenRequest
stattdessen verwenden:
final GoogleAuthorizationCodeTokenRequest req = new GoogleAuthorizationCodeTokenRequest(
TRANSPORT,
JSON_FACTORY,
getClientId(),
getClientSecret(),
code,
redirectUrl
);
req.set("code_verifier", null);
GoogleTokenResponse response = req.execute();