Bir Android clientId kullanarak (client_secret yok) aşağıdaki hata yanıtını alıyordum:
{
"error": "invalid_grant",
"error_description": "Missing code verifier."
}
'Code_verifier' alanı için herhangi bir belge bulamıyorum, ancak bunu hem yetkilendirme hem de belirteç isteklerinde eşit değerlere ayarlarsanız bu hatayı kaldıracağını keşfettim. Amaçlanan değerin ne olması gerektiğinden veya güvenli olup olmayacağından emin değilim. Minimum uzunluğu (16? Karakter) var, ancak ayarın null
da işe yaradığını buldum .
Bir setCodeVerifier()
işlevi olan Android istemcimde yetkilendirme isteği için AppAuth kullanıyorum .
AuthorizationRequest authRequest = new AuthorizationRequest.Builder(
serviceConfiguration,
provider.getClientId(),
ResponseTypeValues.CODE,
provider.getRedirectUri()
)
.setScope(provider.getScope())
.setCodeVerifier(null)
.build();
Düğümdeki örnek bir simge isteği:
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);
}
);
Test ettim ve bu hem https://www.googleapis.com/oauth2/v4/token
ve hem dehttps://accounts.google.com/o/oauth2/token
.
GoogleAuthorizationCodeTokenRequest
Bunun yerine kullanıyorsanız :
final GoogleAuthorizationCodeTokenRequest req = new GoogleAuthorizationCodeTokenRequest(
TRANSPORT,
JSON_FACTORY,
getClientId(),
getClientSecret(),
code,
redirectUrl
);
req.set("code_verifier", null);
GoogleTokenResponse response = req.execute();