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 null
juga 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/token
dan https://accounts.google.com/o/oauth2/token
.
Jika Anda menggunakan GoogleAuthorizationCodeTokenRequest
gantinya:
final GoogleAuthorizationCodeTokenRequest req = new GoogleAuthorizationCodeTokenRequest(
TRANSPORT,
JSON_FACTORY,
getClientId(),
getClientSecret(),
code,
redirectUrl
);
req.set("code_verifier", null);
GoogleTokenResponse response = req.execute();