Menggunakan clientId Android (tidak ada client_secret) saya mendapatkan respon kesalahan berikut:
{
"error": "invalid_grant",
"error_description": "Missing code verifier."
}
Saya tidak dapat menemukan dokumentasi apa pun untuk bidang 'code_verifier' tetapi saya menemukan jika Anda menyetelnya ke nilai yang sama di otorisasi dan permintaan token, itu akan menghapus kesalahan ini. Saya tidak yakin apa nilai yang dimaksudkan atau apakah itu harus aman. Ini memiliki beberapa panjang minimum (16? Karakter) tetapi saya menemukan pengaturan nulljuga berfungsi.
Saya menggunakan AppAuth untuk permintaan otorisasi di klien Android saya yang memiliki setCodeVerifier()fungsi.
AuthorizationRequest authRequest = new AuthorizationRequest.Builder(
serviceConfiguration,
provider.getClientId(),
ResponseTypeValues.CODE,
provider.getRedirectUri()
)
.setScope(provider.getScope())
.setCodeVerifier(null)
.build();
Berikut adalah contoh permintaan token di node:
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);
}
);
Saya menguji dan ini bekerja dengan https://www.googleapis.com/oauth2/v4/tokendan https://accounts.google.com/o/oauth2/token.
Jika Anda menggunakan GoogleAuthorizationCodeTokenRequestgantinya:
final GoogleAuthorizationCodeTokenRequest req = new GoogleAuthorizationCodeTokenRequest(
TRANSPORT,
JSON_FACTORY,
getClientId(),
getClientSecret(),
code,
redirectUrl
);
req.set("code_verifier", null);
GoogleTokenResponse response = req.execute();